I want to call an external program from Python. I have used both Popen() and call() to do that.
What’s the difference between the two?
My specific goal is to run the following command from Python. I am not sure how redirects work.
./my_script.sh > output
I read the documentation and it says that call() is a convenience function or a shortcut function. Do we lose any power by using call() instead of Popen()?
There are two ways to do the redirect. Both apply to either
subprocess.Popenorsubprocess.call.Set the keyword argument
shell = Trueorexecutable = /path/to/the/shelland specify the command just as you have it there.Since you’re just redirecting the output to a file, set the keyword argument
where the object points to the
outputfile.subprocess.Popenis more general thansubprocess.call.Popendoesn’t block, allowing you to interact with the process while it’s running, or continue with other things in your Python program. The call toPopenreturns aPopenobject.calldoes block. While it supports all the same arguments as thePopenconstructor, so you can still set the process’ output, environmental variables, etc., your script waits for the program to complete, andcallreturns a code representing the process’ exit status.is basically the same as calling
callis just a convenience function. It’s implementation in CPython is in subprocess.py:As you can see, it’s a thin wrapper around
Popen.