Ubuntu快速(python/gtk) - 如何监控stdin?

发布于 2024-09-04 19:30:46 字数 292 浏览 4 评论 0原文

我开始使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

韬韬不绝 2024-09-11 19:30:46

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/

只有一腔孤勇 2024-09-11 19:30:46

我不确定快速框架,但在 Python 中,您可以使用 subprocess 模块,它会生成一个新的子进程,但允许通过 stdin/stdout 进行通信。

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

这将允许您从进程中读取数据。

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:

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

and that would let you read data from your process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文