Python subprocess.Popen()等待完成

时间:2015-02-02 18:53:52

标签: python subprocess popen

我正在编写一个小脚本来串行遍历目录并在其中的子目录上运行命令。

我遇到了一个问题但是Popen()它会遍历目录并运行所需的命令而无需等待前一个完成。即。

for dir in dirs:
    #run command on the directory here.

它开始为每个目录启动命令而不关心它。我希望它等待当前的一个完成,然后启动下一个。我在目录上使用的工具是来自SANS SIFT的Log2timeline,这需要相当长的时间并产生相当多的输出。我不关心输出,我只是希望程序在开始下一个之前等待。

实现这一目标的最佳方式是什么?

谢谢!

2 个答案:

答案 0 :(得分:26)

使用Popen.wait

process = subprocess.Popen(["your_cmd"]...)
process.wait()

check_outputcheck_call等待返回代码,具体取决于您要执行的操作和python的版本。

如果您使用的是python> = 2.7并且您不关心输出,请使用check_call

您也可以使用call但如果您的非零返回代码可能会或可能不合适,则不会引发任何错误

答案 1 :(得分:5)

subprocess.check_output( ... )

将阻止......并且可以代替Popen

使用

但是如果你在Popen上设置

subprocess.Popen(...).communicate() 

也将阻止,直到该过程返回