何时使用Popen(),何时使用call()?
注意:我刚接触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 个回答
7
subprocess.call(*popenargs, **kwargs) 是一个用来运行命令和参数的函数。它会等这个命令执行完毕,然后返回一个叫做 returncode 的值。
如果你创建了一个 Popen
对象,你需要自己去调用 sp.wait()
来等待命令完成。
但如果你使用 call
,这个等待的过程会自动帮你完成。