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 代码,这将不会引发任何错误,这可能是合意的,也可能不是合意的
我正在编写一个小脚本来连续遍历目录和 运行 对其中子目录的命令。
我 运行 遇到了一个问题,但是 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 代码,这将不会引发任何错误,这可能是合意的,也可能不是合意的