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

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

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

由于

有帮助吗?

解决方案

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

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

其他提示

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

proc = subprocess.Popen(" whatever program",cwd =" startup dir",shell = True,     stdout = subprocess.PIPE,stderr = subprocess.STDOUT) 点击 而真: 点击     txt = proc.stdout.readline() 点击     如果不是txt:休息 点击     TXT = txt.replace(QUOT; \ r \ n"," \ n&QUOT)代替。(" \ r \ n"," \ n&QUOT)。代替(QUOT; \\"," \ &QUOT) 点击     self.components.taStdout.appendText(TXT)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top