Дополнительный параметр Python-dbus для add_signal_receiver - PullRequest
4 голосов
/ 21 июля 2011

Я хотел бы передать дополнительный параметр в 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

Я не хочу иметь много приемников сигнала одновременно и иметь возможность читать 'x' внутри функции handle_signal.

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

Документация Python DBUS содержит ваш ответ .Он предоставляет следующий пример для передачи отправителя в функцию-обработчик:

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

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

Итак, вместо использования bus.add_signal_receiver, сначала создайте интерфейс для объекта, обеспечивающего сигнал, а затем подключитесь к сигналу, как впример.

1 голос
/ 24 ноября 2014

Чтобы добавить к ответу Обен Сонне, 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')
0 голосов
/ 12 февраля 2016

Если вы хотите путь, с которого был получен сигнал, сделайте следующее:

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

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

Точно так же вы можете передать 'sender', 'destination', 'member' и 'interface', как упомянуто другими. Однако вы не можете пересылать произвольную информацию обратного вызова.

...