在其处理程序上检查接收到的 D-Bus 信号

Inspect a received D-Bus signal on its handler

我正在构建一个通用的 DBus 代理接收器,用户可以利用它来配置通用信号侦听器并将它们代理到另一个服务。

因此,我需要能够收听所有 总线信号:

from dbus import SessionBus

def handler(*args, **kwargs):
  print(args, kwargs)

# ...

bus = SessionBus()
bus.add_signal_receiver(handler, signal_name=None, dbus_interface=None, path=None)

这种方法的问题是我无法从处理程序的 argskwargs 判断哪个 interface/signal name/path 与信号相关联:

args=(dbus.String(':1.22395'), dbus.String(''), dbus.String(':1.22395')) kwargs={}

有没有一种简单的方法来检查 DBus 以获得有关接收信号的更多信息?我想它应该存在(dbus-monitor --monitor 做的事情与我想做的差不多),但我在网上找不到任何参考资料。

查看sender_keyworddestination_keyword等关键字参数add_signal_receiver()

您可能要考虑使用 pydbus, or some other more modern D-Bus binding. dbus-python is old and not very Pythonic. It’s not very actively maintained,并且肯定不会积极开发。