2013-02-27 126 views
45

我有一个创建两个或多个子进程的主进程,我希望主进程要等到所有子进程完成其操作并退出?等待进程,直到所有子进程完成?

# main_script.py 

p1 = subprocess.Popen(['python script1.py']) 
p2 = subprocess.Popen(['python script2.py']) 
... 
#wait main process until both p1, p2 finish 
... 
+4

使用wait方法:'p1.wait(); p2.wait()' – 2013-02-27 08:52:14

+1

检查这个问题了:http://stackoverflow.com/questions/6341358/subprocess-wait-not-waiting-for-popen-process-to-finish-when-using-threads – Calum 2013-02-27 08:54:37

+2

HTTP: //stackoverflow.com/questions/100624/python-on-windows-how-to-wait-for-multiple-child-processes – Gjordis 2013-02-27 09:00:55

回答

69

一个Popen对象都有这正是定义的.wait()方法:等待一个给定的子进程的完成(并且,除了,以重新调整退出状态)。

如果使用这种方法,你会阻止该进程僵尸躺在身边太久。 (或者,你可以使用subprocess.call()subprocess.check_call()进行调用和等待,如果你不需要IO进程,这可能就足够了,但可能这不是一个选项,因为如果两个子进程似乎被认为并行运行,他们不会与(check_call()

如果你有几个子过程等待,你可以做

exit_codes = [p.wait() for p in p1, p2] 

其中当所有的子进程都返回完了。然后你可以得到一个你可以评估的返回代码列表。

+6

问题是如何等待所有*子进程,而不仅仅是一个。 – 2013-08-09 13:13:23

+2

@GregWard如果我等几件事情,我可以连续等待。特别是在这种情况下。 – glglgl 2013-08-09 13:36:04

+2

而且我不认为仅仅遗漏这些细节使得答案毫无用处。 – glglgl 2013-08-09 13:46:09

12
subprocess.call 

自动等待,你也可以使用:

p1.wait()