Python GUI (glade) 显示 shell 进程输出

2 投票
3 回答
3661 浏览
提问于 2025-04-15 17:10

我正在写一个Python应用程序,这个程序会使用subprocess.Popen对象来运行几个子进程。 我有一个用glade做的图形界面,想要实时显示这些命令的输出(这些命令是在subprocess.Popen中运行的)。

有没有人能建议我怎么做?我需要用什么glade对象,怎么把输出重定向到这个对象上?

3 个回答

1

Glade只是一个用来创建图形用户界面的程序,它是和GTK一起使用的。所以当你提到glade对象的时候,可能更应该说gtk小部件。在这种情况下,文本缓冲区(textbuffer)和文本视图(textview)可能是一个解决方案,或者你也可以考虑树视图(treeview)和列表存储(liststore)。subprocess.Popenstdoutstderr这两个参数,它们可以接受类似文件的对象。你可以创建一个适配器,把内容写入文本缓冲区,或者往列表存储中添加项目。

2

这里有一个链接,展示了另一种做法。

我觉得这个内容很有启发,也许其他人也能用上这些技巧。

http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/

2

经过大量的阅读,但一直没有得到我想要的结果,我找到了一种有效的方法。

这个方法是这样的:

#!/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_object('txtview')
proc = subprocess.Popen('ls -al /home'.split(), stdout=subprocess.PIPE, stderr = subprocess.STDOUT)
while True:
    line = proc.stdout.readline()
    viewer.get_buffer().insert_at_cursor(line)
    if not line:
       break

撰写回答