1

与此类似的 问题,但我希望看到一个明确的答案。我正在使用 PythonCard 构建一个简单的 GUI 来包装命令行进程。具体来说,它是一系列 ANT 任务和其他自定义操作的包装器,因此非开发人员可以使用它。

我想将子进程的输出重定向到窗口中的 TextArea。看起来这样做的方法是使用subprocess.Popen(command, stdout=subprocess.PIPE)输出并将其加载到变量中。

问题是如何使用子进程的输出实时更新窗口?欢迎任何提示

谢谢

4

2 回答 2

1

几乎每个你可以包装的子进程都会缓冲它的输出,除非你设法让它相信它实际上连接到一个终端——而子进程不能这样做。相反,请查看pexpect(在每个允许您拥有伪终端的平台上运行良好,即除 Microsoft Windows 之外的每个平台;在 Windows 上您可能会尝试wexpect,但我对后者没有经验)。

这些模块在生成子流程后立即为您提供子流程的输出,并努力欺骗模块尽快生成该输出且无需缓冲,因此它们应该使您可以轻松地实时接收该输出并将其附加到文本字段你想继续更新。

于 2009-07-29T14:29:38.357 回答
1

我也在为此寻找解决方案。事实证明,解决方案非常简单:

proc = subprocess.Popen("whatever program", cwd="startup dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
while True:
txt = proc.stdout.readline()
if not txt: break
txt=txt.replace("\r\n","\n").replace("\r\n","\n").replace("\\","\")
self.components。 taStdout.appendText(txt)

于 2009-11-28T06:09:12.860 回答