subprocess.Popen和os.system之间的区别
subprocess.Popen()和os.system()有什么区别?
如果您查看Python文档的subprocess部分 ,您会注意到有一个如何用os.system()
replaceos.system()
的例子:
sts = os.system("mycmd" + " myarg")
…做同样的事情…
sts = Popen("mycmd" + " myarg", shell=True).wait()
“改进”的代码看起来更复杂,但是更好,因为一旦你知道了subprocess.Popen()
,你就不需要其他东西了。 os.system()
subprocess.Popen()
replace了其他几个工具( os.system()
就是其中之一),它们分布在其他三个Python模块中。
如果有帮助,可以将os.system()
看作是一个非常灵活的os.system()
。
subprocess.Popen()是os.system()的严格超集。
subprocess基于popen2,因此具有许多优点 – PEP中有一个完整的列表,但有一些是:
- 在shell中使用pipe道
- 更好的换行支持
- 更好地处理exception
os.system相当于Unix 系统命令,而subprocess是一个辅助模块,它为Popen命令提供的许多function提供了一个更简单和可控的界面。 这些devise与Unix Popen命令类似。
system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed
在哪里
The popen() function opens a process by creating a pipe, forking, and invoking the shell.
如果你正在考虑使用哪一个,那么明确使用子过程是因为你拥有所有的执行设施,以及对过程的附加控制。