Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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 如何在向后兼容的代码中使用GLib.io_add_watch?_Python_Linux_Gtk_Pygobject - Fatal编程技术网

Python 如何在向后兼容的代码中使用GLib.io_add_watch?

Python 如何在向后兼容的代码中使用GLib.io_add_watch?,python,linux,gtk,pygobject,Python,Linux,Gtk,Pygobject,在Ubuntu 14.04下运行一些较旧的Python+GTK3代码时,出现了以下弃用警告: PyGIDeprecationWarning: io_add_watch is deprecated; use GLib.io_add_watch instead /usr/lib/python3/dist-packages/gi/overrides/GLib.py:655: PyGIDeprecationWarning: Calling io_add_watch without priority as

在Ubuntu 14.04下运行一些较旧的Python+GTK3代码时,出现了以下弃用警告:

PyGIDeprecationWarning: io_add_watch is deprecated; use GLib.io_add_watch instead
/usr/lib/python3/dist-packages/gi/overrides/GLib.py:655: PyGIDeprecationWarning: Calling io_add_watch without priority as second argument is deprecated
/usr/lib/python3/dist-packages/gi/overrides/GLib.py:666: PyGIDeprecationWarning: Calling io_add_watch with priority keyword argument is deprecated, put it as second positional argument
这来自一行,其中调用了
GObject.io\u add\u watch()

从和看来,
GLib.io\u add\u watch()
的参数配置文件不同于
GObject.io\u add\u watch()
。所以现在我想知道:

  • 在Python+GTK3中,在fd上设置I/O监视的正确方法是什么?使用哪个函数,使用哪个参数配置文件
  • 如何编写代码,使其与旧系统兼容,例如Ubuntu 12.04
  • 任何在新旧系统中使用过该API的人都能给出一些提示吗?

    GLib.io\u add\u watch()已经存在很长时间了:它早在Ubuntu 12.04发布之前就已经存在了。所以正确的做法是使用它


    我认为函数签名非常相似,除了优先级:您可能应该使用GLib.priority\u DEFAULT。

    弃用警告意味着正在使用的功能将在PyGObject的下一个主要版本(目前没有计划)中删除。弃用警告仅在PyGObject的开发版本(奇数个次要版本号)中显示,或者在使用-Wd Python命令行选项启用弃用警告时显示

    如果您需要与3.7.2之前的PyGObject版本保持兼容性,那么最好继续使用不推荐的版本,该版本应适用于整个3.x系列:

    GObject.io_add_watch(theFd, GLib.IO_IN, onReadable, priority=prio)
    
    如果这在PyGObject的某些版本中不起作用,则这是一个API中断,因此是一个错误,请将其记录在此处:


    哎呀,这应该是一个答案,等一下……还没有运气。。。在14.04我需要这样称呼它:GLib.io_add_watch(offd、prio、GLib.io_IN、onReadable);但在12.04上,它必须这样命名:GLib.io\u add\u watch(offd,GLib.io\u IN,onReadable,priority=prio)。在任一系统上使用错误的参数配置文件都会导致异常或警告。我真的应该在这里添加一些运行时版本检查来找到正确的调用吗?我不认为运行时版本检查是不合理的,因为您正在处理(不幸的)更改API的问题。@oliver哦,很抱歉误导您:我没有注意到python包装器在这一过程中发生了更改。运行时版本检查还有另一种解决方案:命名您提供的所有参数。那么订单就不重要了。jku,谢谢你的提示!看起来12.04绑定不喜欢命名参数,但是(“TypeError:io_add_watch至少需要3个参数”)——可能是该版本中的一个简单错误。我现在已经切换到版本检查(“if-GObject.pygobject_version<(3,7,2)”),这很难看,但应该可以正常工作。