我正在处理运行许多子进程的脚本。该脚本应该能够全部运行它们,然后检查它们是否已完成。
不启动,等待它完成,然后开始下一个。
例如:
sp1 = subprocess.Popen(["sleep 60", shell=True)
sp2 = subprocess.Popen(["sleep 10", shell=True)
sp3 = subprocess.Popen(["sleep 80", shell=True)
sp1_done = False
sp2_done = False
sp3_done = False
while not sp1_done and not sp2_done and not sp3_done:
if sp1.returncode and not sp1_done:
print("sp1 done")
sp1_done = True
if sp2.returncode and not sp2_done:
print("sp2 done")
sp2_done = True
if sp3.returncode and not sp3_done:
print("sp3 done")
sp3_done = True
print("all done")
我已经读过可以使用
访问子流程的错误代码 sp1_data = sp1.communicate()[0]
然后使用
returncode = sp1.returncode
但是像这样,脚本等待sp1
完成。
如何运行多个子流程,而不是等待它们完成,但检查它们是否已完成(例如通过检查返回代码)?
答案 0 :(得分:1)
您需要对每个启动的子进程使用poll方法。并检查returncode不是None:
while .... # as written
sp1.poll()
sp2.poll()
sp3.poll()
if sp1.returncode is not None and not sp1_done:
.... # as written
... # as written