我正在编写一个使用subprocess.Popen对象运行多个子进程的python应用程序。 我有一个glade GUI,想要在gui中实时显示这些命令的输出(在subprocess.Popen中运行)。
有人可以建议一种方法吗?我需要使用哪种glade对象以及如何重定向输出?
答案 0 :(得分:2)
这是一个链接,它还显示了另一种方法。
我发现这非常有见地,也许其他人可以使用这些技巧。
http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/
答案 1 :(得分:1)
glade只是一个使用gtk构建gui的程序,因此当你要求 glade对象时,你应该要求 gtk widget ,在这种情况下textbuffer和textview chould是一个解决方案,或者树视图和列表库。
subprocess.Popen
具有stdout
和stderr
个参数,可以接受类似文件的对象。您可以创建一个写入textbuffer的适配器或在liststore中添加项目
答案 2 :(得分:1)
经过大量的阅读并且没有得到我想要的结果,我找到了另一种方法。
就像这样
#!/usr/bine/env python
import subprocess
import gtk
### Of course, you should have the gui built and know which widgets to use for this.
viewer = self.builder.get_widget('txtview')
proc = subprocess.Popen('ls -al /home'.split(), stdout=subprocess.PIPE, stderr = subprocess.STDOUT)
while True:
line = proc.stdout.readline()
viewer.get_buffer().instert_at_cursor(line)
if not line:
break