我什么时候应该使用Popen(),什么时候应该使用call()?

时间:2011-05-20 19:27:52

标签: python call subprocess popen

警告:Python的新手。

希望听取实际使用它的专业人士的意见:

subprocess.Popen()subprocess.call()之间的主要区别是什么?何时最好使用每个?

除非您想阅读为什么我在考虑这个问题或者以什么为中心解答,否则您现在可能会停止阅读。

我被激发去问这个问题,因为我正在编写脚本中的问题,我开始使用subprocess.Popen(),最终称为系统暂停,然后想要删除创建系统暂停的.exe,但我注意到Popen(),所有命令似乎都在一起运行(.exe上的删除在exe关闭之前执行..),虽然我尝试添加communicate()

这是我上面描述的假代码:

subprocess.Popen(r'type pause.exe > c:\worker.exe', shell=True).communicate()
subprocess.Popen(r'c:\worker.exe', shell=True).communicate()
subprocess.Popen(r'del c:\worker.exe', shell=True).communicate()

1 个答案:

答案 0 :(得分:7)

  

subprocess.call(* popenargs,** kwargs)   使用参数运行命令。等待   命令完成,然后返回   returncode属性。

如果您创建了Popen对象,则必须自己调用sp.wait()

如果您使用call,那就是为您完成的。