Ubuntu快速监控stdin(python/gtk)的方法?

2 投票
2 回答
1467 浏览
提问于 2025-04-15 23:40

我开始使用Ubuntu的“quickly”框架,这个框架是基于python和gtk的。我想为一个使用标准输入和输出的文本模式C状态机写一个图形界面的包装程序。

我对gtk还很陌生。我注意到python的打印命令会输出到终端窗口,所以我想我可以把这个输出重定向到我的C程序的标准输入。不过,我该如何让我的quickly程序监控标准输入(也就是观察C程序的标准输出响应)呢?我想我需要某种轮询循环,但我不知道在“quickly”框架中是否支持这个。

或者说,重定向并不是最佳选择,我是不是应该考虑使用像gobject.spawn_async这样的东西?

2 个回答

2

我不太了解quickly框架,但在Python中,你可以使用subprocess模块。这个模块可以启动一个新的子进程,并且允许通过标准输入和标准输出进行通信。

http://docs.python.org/library/subprocess.html

你可以看看这个文档,里面的内容非常有用。

如果你想进行轮询,可以使用gobject.timeout_add

你可以创建一个类似这样的函数:

def mypoller(self):
    data = myproc.communicate()
    if data[0]: #There's data to read
       # do something with data
    else:
       # Do something else - delete data, return False
       # to end calls to this function

这样你就可以从你的进程中读取数据了。

4

在GTK中,选择的版本是glib.io_add_watch。如果你想把程序的输入输出(stdin/stdout)和图形界面(GUI)连接起来,可以看看我之前写的一篇文章:

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

撰写回答