Aro*_*vit 97 python subprocess system
subprocess.Popen()和之间有什么区别os.system()?
Jac*_*ble 89
如果检查出Python文档的子部分,你会发现有一个如何来代替的例子os.system()有subprocess.Popen():
sts = os.system("mycmd" + " myarg")
Run Code Online (Sandbox Code Playgroud)
......做同样的事......
sts = Popen("mycmd" + " myarg", shell=True).wait()
Run Code Online (Sandbox Code Playgroud)
"改进的"代码看起来更复杂,但它更好,因为一旦你知道subprocess.Popen(),你不需要任何其他东西.subprocess.Popen()替换了os.system()分散在其他三个Python模块中的其他几个工具(只是其中之一).
如果有帮助,可以认为subprocess.Popen()是非常灵活的os.system().
Jan*_*dec 42
subprocess.Popen()严格超集os.system().
Sen*_*ran 21
os.system等同于Unix 系统命令,而subprocess是一个辅助模块,用于提供Popen 命令提供的许多功能,并提供更简单,可控的接口.这些设计类似于Unix Popen命令.
system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed
Run Code Online (Sandbox Code Playgroud)
在哪里
The popen() function opens a process by creating a pipe, forking, and invoking the shell.
Run Code Online (Sandbox Code Playgroud)
如果您正在考虑使用哪一个,那么请务必使用子进程,因为您拥有所有执行工具,并且可以对该进程进行额外控制.
当运行在Windows上的Python(CPython的)的<built-in function system> 使用os.system将窗帘下执行_wsystem而如果你使用非Windows操作系统,它会利用系统。
相反,Popen 应该在 windows 上使用CreateProcess,在基于 posix 的操作系统中使用_posixsubprocess.fork_exec。
也就是说,一条重要的建议来自os.system docs,它说:
subprocess 模块提供了更强大的工具来生成新进程并检索它们的结果;使用该模块比使用此功能更可取。有关一些有用的秘诀,请参阅子流程文档中的用子流程模块替换旧函数部分。