不要等待子进程,但稍后检查返回代码

时间:2016-12-15 15:34:52

标签: python shell subprocess return-code

我正在处理运行许多子进程的脚本。该脚本应该能够全部运行它们,然后检查它们是否已完成。

不启动,等待它完成,然后开始下一个。

例如:

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完成。

如何运行多个子流程,而不是等待它们完成,但检查它们是否已完成(例如通过检查返回代码)?

1 个答案:

答案 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