Ubuntu快速(python/gtk) - 如何监控stdin?
我开始使用 Ubuntu 的“快速”框架,它是基于 python/gtk 的。我想为使用 stdin/stdout 的文本模式 C 状态机编写一个 gui 包装器。
我是gtk新手。我可以看到 python print 命令将写入终端窗口,因此我假设我可以将其重定向到我的 C 程序的标准输入。但是我怎样才能让我的快速程序监视标准输入(即监视 C 程序的标准输出响应)?我想我需要某种轮询循环,但我不知道“快速”框架中是否/在哪里支持它。
或者重定向不是可行的方法 - 我应该看看像 gobject.spawn_async 这样的东西吗?
I'm starting to work with Ubuntu's "quickly" framework, which is python/gtk based. I want to write a gui wrapper for a textmode C state-machine that uses stdin/stdout.
I'm new to gtk. I can see that the python print command will write to the terminal window, so I assume I could redirect that to my C program's stdin. But how can I get my quickly program to monitor stdin (i.e. watch for the C program's stdout responses)? I suppose I need some sort of polling loop, but I don't know if/where that is supported within the "quickly" framework.
Or is redirection not the way to go - should I be looking at something like gobject.spawn_async?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
select的gtk版本是glib.io_add_watch,你可能想将进程的stdin/stdout重定向到GUI或从GUI重定向,你可以查看我之前写的一篇文章:
http://pygabriel.wordpress.com/2009/07/27/重定向-stdout-on-a-gtk-textview/
The gtk version of select, is glib.io_add_watch, you may want to redirect the stdin/stdout of the process to/from the GUI, you can check an article I've written time ago:
http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/
我不确定快速框架,但在 Python 中,您可以使用 subprocess 模块,它会生成一个新的子进程,但允许通过 stdin/stdout 进行通信。
http://docs.python.org/library/subprocess.html
看一下在文档中,但这非常有用。
如果你想进行轮询,你可以使用 gobject .timeout_add。
您将创建一个类似这样的函数:
这将允许您从进程中读取数据。
I'm not sure about the quickly framework, but in Python you can use the subprocess module which spawns a new child process but allows communication via stdin/stdout.
http://docs.python.org/library/subprocess.html
Take a look at the documentation, but that's pretty useful.
If you want to do polling you can use a gobject.timeout_add.
You'd create a function something like this:
and that would let you read data from your process.