pythonwx(Python卡)记录子进程输出到wind

2024-05-13 22:38:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

谢谢


Tags: 方法答案命令行进程开发人员gui重定向command
2条回答

您可以包装的几乎每个子进程都会缓冲其输出,除非您设法欺骗它,让它相信它实际上连接到了终端,而子进程不能做到这一点。相反,请看一下pexpect(在每一个允许你有一个伪终端的平台上运行得很好,也就是说,除了microsoftwindows之外的所有平台;在Windows上,你可以尝试wexpect,但我对后者没有经验)。在

这些模块在生成子进程的输出后立即提供给您,并努力欺骗模块尽快生成输出而不进行缓冲,因此它们应该使您能够轻松地实时接收输出并将其附加到要不断更新的文本字段中。在

我也在寻找解决办法。结果发现解决方案非常简单:

过程=子流程.Popen(“任何程序”,cwd=“startup dir”,shell=True, 标准输出=子流程.管道,标准=子流程.STDOUT)
真,而:
文本=进程stdout.readline()
如果不是txt:断开
文本=txt.替换(“\r\n”,“\n”)。替换(“\r\n”,“\n”)。替换(“\\”,“\”)
self.components.tastdoot.appendText(文本)

相关问题 更多 >