python – Difference between subprocess.Popen and os.system
python – Difference between subprocess.Popen and os.system
If you check out the subprocess section of the Python docs, youll notice there is an example of how to replace os.system()
with subprocess.Popen()
:
sts = os.system(mycmd + myarg)
…does the same thing as…
sts = Popen(mycmd + myarg, shell=True).wait()
The improved code looks more complicated, but its better because once you know subprocess.Popen()
, you dont need anything else. subprocess.Popen()
replaces several other tools (os.system()
is just one of those) that were scattered throughout three other Python modules.
If it helps, think of subprocess.Popen()
as a very flexible os.system()
.
subprocess.Popen()
is strict super-set of os.system()
.
python – Difference between subprocess.Popen and os.system
os.system
is equivalent to Unix system
command, while subprocess
was a helper module created to provide many of the facilities provided by the Popen
commands with an easier and controllable interface. Those were designed similar to the Unix Popen command.
system()
executes a command specified in command by calling/bin/sh -c command
, and returns after the command has been completed
Whereas:
The
popen()
function opens a process by creating a pipe, forking, and
invoking the shell.
If you are thinking which one to use, then use subprocess
definitely because you have all the facilities for execution, plus additional control over the process.