Python subprocess.Popen() 等待完成

Python subprocess.Popen() wait for completion

我正在编写一个小脚本来连续遍历目录和 运行 对其中子目录的命令。

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

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

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

完成此任务的最佳方法是什么?

谢谢!

subprocess.check_output( ... )

会阻塞...并且可以用来代替 Popen

但是,如果您设置为 Popen

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

也会阻塞直到进程returns

使用Popen.wait:

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

check_output, check_call 都等待 return 代码,具体取决于您要执行的操作和 python.

的版本

如果您使用 python >= 2.7 并且您不关心输出,只需使用 check_call.

您也可以使用 call,但如果您有一个非零的 return 代码,这将不会引发任何错误,这可能是合意的,也可能不是合意的