从子进程调用返回

时间:2015-02-24 15:56:16

标签: python

我正在尝试使用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)

2 个答案:

答案 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显式向子进程发送换行符。