向Python/gtk3gui添加流I/O

2024-05-16 01:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Python程序有一个用gtk3编写的GUI(我通过from gi.repository import Gtk使用gtk3)。我调用Gtk.main()来运行GUI。除了运行GUI之外,程序还应该不断地监视标准输入以获取传入的命令,并将响应写入标准输出。你知道吗

在Python中使用gtk3的正确方法是什么?有什么方法可以将stdin侦听器挂接到Gtk.main()上吗?我可以使用Python的标准I/oapi来读取sys.stdin并写入sys.stdout,还是需要使用一些等效的glibapi?我可以只写对stdout的响应吗?或者我需要关心缓冲,并将输出代码挂接到一些油腔滑调的I/O抽象上吗?你知道吗


Tags: 方法fromimport命令程序gtk标准main
1条回答
网友
1楼 · 发布于 2024-05-16 01:14:10

我设法拼凑了一个非常基本的剧本:

import os
import sys

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GLib, Gtk

logfile = open(os.path.splitext(__file__)[0]+'.log', 'w')

def on_stdin(fobj, cond):
    line = fobj.readline()
    print(repr(line), file=logfile)
    if line == '':
        sys.exit(0)
    return True

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
win.show_all()
GLib.io_add_watch(sys.stdin, GLib.IO_IN, on_stdin)
Gtk.main()

尝试将ls管道连接到它。if line == ''很重要:如果流已经准备好被读取,并且读取没有返回任何字节,那就意味着文件结束。如果我们不停止监视文件末尾的流,我们将得到对on_stdin的无休止的调用,因为Unix认为文件末尾流总是可以读取的(请参见Why does poll keep returning although there is no input?

相关问题 更多 >