此版本有similar questions,但我希望看到一个明确的答案。我正在使用PythonCard构建一个简单的GUI来包装命令行进程。具体来说,它是一系列ANT任务和其他自定义操作的包装器,因此非开发人员可以使用它。
我想将子进程的输出重定向到窗口中的TextArea。看起来这样做的方法是使用subprocess.Popen(command, stdout=subprocess.PIPE)
并将输出加载到变量。
问题是如何使用子进程的输出更新窗口?欢迎任何提示
由于
答案 0 :(得分:1)
几乎每个你可以包装的子进程都会缓冲它的输出,除非你设法愚弄它相信它实际连接到一个终端 - 而子进程不能这样做。相反,请查看pexpect(在允许您拥有伪终端的每个平台上运行良好,即除Microsoft Windows之外的每个平台;在Windows上,您可以尝试wexpect但我没有使用后者的经验。
这些模块在生成后立即为您提供子进程的输出,并努力愚弄模块以尽快生成该输出并且不进行缓冲,因此它们应该使您可以轻松实时接收该输出并将其附加到您要继续更新的文本字段。
答案 1 :(得分:1)
我也在寻找解决方案。事实证明解决方案非常简单:
proc = subprocess.Popen(“无论程序”,cwd =“startup dir”,shell = True,
stdout = subprocess.PIPE,stderr = subprocess.STDOUT)
而真:
txt = proc.stdout.readline()
如果不是txt:休息
TXT = txt.replace( “\ r \ n”, “\ n”)。替换( “\ r \ n”, “\ n”)。代替( “\\”, “\”)
self.components.taStdout.appendText(TXT)