Python DBUS - 带有额外参数的接口上的“PropertiesChanged”侦听器
Posted
技术标签:
【中文标题】Python DBUS - 带有额外参数的接口上的“PropertiesChanged”侦听器【英文标题】:Python DBUS - `PropertiesChanged` listener on interface with extra arguments 【发布时间】:2016-08-30 05:49:00 【问题描述】:使用 Python 3 DBUS 模块,信号处理程序为 PropertiesChanged 信号采用的默认参数如下:
def handler(interface, changed_properties, invalidated_properties):
something...
监听器设置如下:
dbus.Interface.connect_to_signal("PropertiesChanged", handler)
我怎样才能在最后添加一个额外的参数,以便我可以拥有一个具有如下结构的信号处理程序:
def handler(interface, changed_properties, invalidated_properties, extra_argument):
something...
【问题讨论】:
【参考方案1】:PropertiesChanged 是 org.freedesktop.DBus.Properties 接口的一部分,您不应修改其签名。其他程序假定它完全按照 DBus 规范中的规定实现。多个 DBus 绑定使用它来在代理对象发生更改时自动更新它们的属性。
您可以使用自己的自定义参数创建自己的信号:
使用 python-dbus(已弃用):
class Example(object):
@dbus.service.signal(dbus_interface='com.example.Sample',
signature='us')
def NumberOfBottlesChanged(self, number, contents):
pass
使用 pydbus:
from pydbus.generic import signal
class Example(object):
"""
<node>
<interface name='com.example.Sample'>
<signal name='NumberOfBottlesChanged'>
<arg type='u' name='number'/>
<arg type='s' name='contents'/>
</signal>
</interface>
</node>
"""
NumberOfBottlesChanged = signal()
【讨论】:
我正在使用 Python 3 的 freedesktop dbus 模块,我认为这与上面的第一个示例相同。我的目标最终是创建一个信号接收器,但我可以通过它传递一个类的self
对象(这样我就可以修改类的成员)——我只需要为这个程序更改它,因为它只会用过一次。
您不能简单地使用 lambda 作为处理程序,并在其词法范围内使用 self 吗?
这可能是一个解决方案,我会试试看:)以上是关于Python DBUS - 带有额外参数的接口上的“PropertiesChanged”侦听器的主要内容,如果未能解决你的问题,请参考以下文章