【问题标题】:Python-dbus extra param to add_signal_receiverPython-dbus 额外参数到 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”。

【问题讨论】:

    标签: python signals dbus


    【解决方案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")
        

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

        【讨论】:

          猜你喜欢
          • 2016-08-30
          • 2015-06-02
          • 1970-01-01
          • 2015-02-24
          • 2017-09-21
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 2014-05-20
          相关资源
          最近更新 更多