Python-dbus 额外参数到 add_signal_receiver

Posted

技术标签:

【中文标题】Python-dbus 额外参数到 add_signal_receiver【英文标题】:Python-dbus extra param to add_signal_receiver 【发布时间】:2011-10-10 05:05:35 【问题描述】:

我想将额外的参数传递给 add_signal_receiver 或以某种方式获取接收信号的路径。 现在是这样定义的:

bus.add_signal_receiver(handle_signal, 'RemoteDeviceFound', 'org.bluez.Adapter', 'org.bluez', '/org/bluez/hci'+x)

def handle_signal(address, cls, rssi):
    xxxx

我不想同时拥有多个信号接收器,并且能够在 handle_signal 函数中读取“x”。

【问题讨论】:

【参考方案1】:

Python DBUS documenation has your answer。它提供了以下示例将发送者传递给处理函数:

def handler(sender=None):
    print "got signal from %r" % sender

iface.connect_to_signal("Hello", handler, sender_keyword='sender')

因此,不要使用bus.add_signal_receiver,而是先为信号提供对象创建一个接口,然后像示例中那样连接到信号。

【讨论】:

【参考方案2】:

添加到 Oben Sonne 的回答中,add_signal_receiver 采用相同的参数:

bus = dbus.SystemBus()
bus.add_signal_receiver(handler,
                        sender_keyword='sender',
                        destination_keyword='destination',
                        member_keyword='member',
                        path_keyword='path',
                        interface_keyword='interface')

【讨论】:

【参考方案3】:

如果您想要接收信号的路径,请执行以下操作:

def handler(path=None):
    print("got signal with path %r" % path)

bus.add_signal_receiver(handler, path_keyword="path")

同样,您可以传递其他人提到的“发件人”、“目的地”、“成员”和“接口”。但是,您不能转发任意回调信息。

【讨论】:

以上是关于Python-dbus 额外参数到 add_signal_receiver的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python3 通过 python-dbus 在 Linux 上的屏幕保护程序状态

将带有额外参数的文件发送到 WCF REST 服务

将模型和额外参数从视图传递到 MVC 中的操作

调用中的 RxCocoa 额外参数

如何将额外参数传递给链接到 XIB 文件的自定义 UIView?

Alamofire 请求收到错误“调用中的额外参数”