Python subprocess.Popen()等待完成

DJM*_*y12 13 python subprocess popen

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

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

for dir in dirs:
    #run command on the directory here.
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Pad*_*ham 34

使用Popen.wait:

process = subprocess.Popen(["your_cmd"]...)
process.wait()
Run Code Online (Sandbox Code Playgroud)

或者 check_output,check_call这些都等待返回代码,具体取决于你想要做什么和python的版本.

如果你使用python> = 2.7并且你不关心输出只是使用check_call.

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


Jor*_*ley 7

subprocess.check_output( ... )
Run Code Online (Sandbox Code Playgroud)

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

但是如果你在Popen上

subprocess.Popen(...).communicate() 
Run Code Online (Sandbox Code Playgroud)

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

  • “ check_output”和“ .communicate()”在这里都没有用:*“ [子进程]产生大量输出。我不在乎输出” *。应该使用`call()`或`check_call()`代替。 (2认同)