我正在使用subprocess.Popen()来运行进程并在执行其他操作之前等待它们完成。对于单个进程,我以这种通用形式编写了我的代码:
process = subprocess.pOpen(['command', 'options...', '1> output.txt'])
process.wait()
more code...
它运作得很好。脚本等待进程将结果输出到output.txt,然后再转到“更多代码...”
但是,我不知道该怎么做才能运行多个并发进程,并等待所有这些进程完成,以便继续执行其余的代码。没有等待的逻辑,我的代码通常看起来像这样:
for i in range(0, n_streams):
os.system("start /b command [options] 1> output{0}.txt".format(i))
它工作正常;每个进程将输出写入文本文件,它们在我想要的同时运行。我无法弄清楚如何让程序在继续之前等待所有程序写入文本文件。
我一直认为我需要做的就是用pOpen()替换os.system()并使用wait(),就像我在上面为单个进程所做的那样,但这只会导致进程的实例按顺序运行。
重申我的问题:如何在同一时间运行多个进程实例,并等待所有实例完成(写入各自的输出文件),然后再继续?
答案 0 :(得分:0)
使用subprocess.Popen.returncode可以检查子流程是否结束。
答案 1 :(得分:0)
只需存储所有已启动的进程,然后等待每个进程:
# Start and store all of your processes
processes = []
for i in range(0, n_streams):
processes.append(subprocess.Popen(['command', 'options...', '1> output.txt']))
# Wait for all of them to complete
for proc in processes:
proc.wait()