add-signal_receiver的Python-dbus额外参数

时间:2011-07-21 12:43:19

标签: python signals dbus

我想将额外的参数传递给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'。

3 个答案:

答案 0 :(得分:3)

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,而是首先为信号提供对象创建一个接口,然后像示例中那样连接到信号。

答案 1 :(得分:1)

要添加到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')

答案 2 :(得分:0)

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

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

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

同样,您可以传递其他人提到的'sender','destination','member'和'interface'。但是,您无法转发任意回调信息。