为什么io\u add\u watch()回调接收到错误的IOChannel对象?

2024-06-10 05:03:31 发布

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

据我所知,从可用的文档来看,GLib.io\u add\u watch()应该注册一个函数,以便在IOChannel上发生条件时调用,callback function应该接收所述IOChannel作为其第一个参数。太好了,不过不是。GLib正在向回调传递一个完全不同的IOChannel对象。为什么

换句话说,为什么这段代码会产生断言错误

#!/usr/bin/env python3

import gi
from gi.repository import GLib

_, _, fd, _ = GLib.spawn_async(['/bin/echo', 'hello'], standard_output=True)

channel = GLib.IOChannel.unix_new(fd)

def on_read(callback_channel, condition):
    assert callback_channel is channel

GLib.io_add_watch(channel, GLib.PRIORITY_DEFAULT, GLib.IO_IN, on_read)

GLib.MainLoop().run()

Tags: 函数文档ioimportaddreadbinon
1条回答
网友
1楼 · 发布于 2024-06-10 05:03:31

IOChannel是GBoxed结构,而不是GObject。它没有身份,通过副本传递。您在回调中收到的值与您给出的值相等,但它们不是同一个对象,也不是所有字段都具有相同的值

相关问题 更多 >