Difference between subprocess.Popen and os.system
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Ancient Construction
--
Chapters
00:00 Difference Between Subprocess.Popen And Os.System
00:13 Accepted Answer Score 166
00:52 Answer 2 Score 84
01:02 Answer 3 Score 41
01:46 Answer 4 Score 26
02:04 Answer 5 Score 10
02:47 Thank you
--
Full question
https://stackoverflow.com/questions/4813...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #subprocess #system
#avk47
ACCEPTED ANSWER
Score 166
If you check out the subprocess section of the Python docs, you'll 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 it's better because once you know subprocess.Popen(), you don't 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().
ANSWER 2
Score 84
subprocess.Popen() is strict super-set of os.system().
ANSWER 3
Score 41
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.
ANSWER 4
Score 26
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:
- using pipe in the shell
- better newline support
- better handling of exceptions