子进程等待直到结束才能继续

时间:2015-01-16 15:36:15

标签: python windows python-2.7

这段代码:

  reply = subprocess.Popen(Command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  data, error = reply.communicate()
  outputText.insert("end", data + "\n")

此时它运行整个子进程(循环遍历一堆行),只有THEN将运行outputText位。

我可以更改为脚本的每个循环运行outputText,而不是在子进程完成时运行。我最后尝试了一个.wait(),但它错误地用了#34;' int'对象没有属性'沟通'"消息。

谢谢, 克里斯。

编辑:这是命令输出的一次迭代的示例:

Ignoring profile '\\MachineName\C$\Users\UserName1' (reason: directory inclusion)
Ignoring profile '\\MachineName\C$\Users\UserName2' (reason: directory inclusion)

The following user profiles match the deletion criteria:

\\MachineName\C$\Users\UserName3

输出中可能包含许多行。

1 个答案:

答案 0 :(得分:2)

您需要直接迭代communicate Command stdout属性,而不是调用将reply完成后阻止的reply = subprocess.Popen(Command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) for line in reply.stdout: outputText.insert("end", line +"\n")

stdout

这会将子流程中的outputText的每一行插入Command,一次一个,直到is_end_of_loop完成。

修改

在这里'如何做你正在尝试用"循环"你在谈论。您需要自己添加out = "" for line in reply.stdout: out += line if is_end_of_loop(line): outputText.insert("end", out +"\n") out = "" 的逻辑。

{{1}}