What is the difference between subprocess.Popen()
and os.system()
?
This question is related to
python
subprocess
system
When running python (cpython) on windows the <built-in function system>
os.system will execute under the curtains _wsystem while if you're using a non-windows os, it'll use system.
On contrary, Popen should use CreateProcess on windows and _posixsubprocess.fork_exec in posix-based operating-systems.
That said, an important piece of advice comes from os.system docs, which says:
The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.
Subprocess is based on popen2, and as such has a number of advantages - there's a full list in the PEP here, but some are:
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.
subprocess.Popen()
is strict super-set of os.system()
.
Source: Stackoverflow.com