我正在尝试使用python并行生成一些文件。 Python将生成命令称为新的子进程。到目前为止,创建了子进程,文件也是如此。
我注意到,在最后一个过程结束时,预计会有回车。按Enter键然后完成最后一个过程。
如果我使用os.system(commandString)同步(即顺序)运行文件生成,则不需要CR。最后一个过程是否在某种程度上等待某事?
感谢您的帮助!
米哈伊
import subprocess
for trace in traces:
... # build commandString containing the in- and output filename
from subprocess import Popen
p = Popen(commandString)
答案 0 :(得分:0)
我想我忘了等待进程结束?
我修改了代码,现在就可以了! :
processList = []
for trace in traces:
... # build commandString containing the in- and output filename
from subprocess import Popen
p = Popen(commandString)
processList.append(p)
for pr in processList:
pr.wait()
答案 1 :(得分:0)
首先,只有你知道这些子流程是什么,以及它们是否在某些时候期望通过stdin
发送输入。如果他们这样做,你可以发送给他们。
然后,有an important note in the Python docs替换os.system()
:
status = subprocess.call("mycmd" + " myarg", shell=True)
因此,没有必要使用Popen()
路由,在子进程模块中有一些有用的辅助方法,例如call()
。但是,如果您使用Popen()
,则需要在之后处理返回的对象。
为了更好地控制,在您的情况下,我可能会将sp = subprocess.Popen(...)
与out, err = sp.communicate(b"\n")
结合使用。
请注意,sp.communicate(b"\n")
通过stdin显式向子进程发送换行符。