Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么io_add_watch()回调接收到错误的IOChannel对象?_Python_Pygtk_Glib - Fatal编程技术网

Python 为什么io_add_watch()回调接收到错误的IOChannel对象?

Python 为什么io_add_watch()回调接收到错误的IOChannel对象?,python,pygtk,glib,Python,Pygtk,Glib,据我所知,从可用的文档来看,GLib.io_add_watch应该注册一个函数,以便在IOChannel上发生条件时调用,并且应该接收所述IOChannel作为其第一个参数。好极了,只是它没有。GLib正在向回调传递一个完全不同的IOChannel对象。为什么? 换句话说,为什么这段代码会生成断言错误 #!/usr/bin/env python3 import gi from gi.repository import GLib _, _, fd, _ = GLib.spawn_async([

据我所知,从可用的文档来看,GLib.io_add_watch应该注册一个函数,以便在IOChannel上发生条件时调用,并且应该接收所述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()

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