Ubuntu快速监控stdin(python/gtk)的方法?
我开始使用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/