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. 

如果你正在考虑使用哪一个,那么明确使用子过程是因为你拥有所有的执行设施,以及对过程的附加控制。