这段代码:
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
输出中可能包含许多行。
答案 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}}