等待外部启动的进程完成

32

如何让Python脚本等待使用os.system()调用启动的某个进程完成?例如,像这样的代码

for i in range(0, n):
    os.system('someprog.exe %d' % i)

这将同时启动请求的进程n次。

2个回答

30

os.system()会等待其进程完成后才返回。

如果你发现它没有等待,那么你启动的进程很可能会自行分离以在后台运行,在这种情况下,Dor给出的subprocess.Popen + wait示例将无法帮助。

另外:如果你只想要subprocess.Popen + wait,使用subprocess.call即可:

import subprocess
subprocess.call(('someprog.exe', str(i)))

这与os.system()几乎没有区别,只不过是明确地传递命令和参数,而不是将其作为单个字符串交给它。


2
如果进程在后台运行,该怎么办?没有办法让Python等待下一个循环吗? - Aryan Bansal

28

  1. 这会泄漏管道句柄,必须使用p.close()关闭。改用with subprocess.Popen(('command', str(i)) as p: p.wait()代替。
  2. 如果您不读取管道,而进程向stdout输出大量内容,则管道会被堵塞,导致死锁。
- kkm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接