如何使用Python在自定义dbus上导出对象?
我想在一个自定义的总线上提供 dbus 方法和信号(也就是说,不使用会话总线或系统总线)。如果我从命令行启动一个 dbus-daemon 的测试副本,具体操作可以参考 dbus-daemon 手册,像这样:
dbus-daemon --session --print-address
那么这会返回一个地址,例如:
unix:abstract=/tmp/dbus-vthAiAw4am,guid=60da6b6ef244a0dbdb9710a800002218
我可以在 d-feet 中使用这个地址来“连接到其他总线”,但那里什么都没有。现在,我想在这个总线上声明一个名称,并导出对象,以便使用 Python 提供 dbus 方法和信号。我尝试阅读 dbus.service.BusName
背后的代码,通常我会在这里传入会话总线或系统总线,但我完全搞不懂。有人知道怎么做吗(如果可能的话)?
1 个回答
3
查看 d-feet 的源代码显然比浏览整个 dbus-python 库要简单得多,这样更容易找到答案。像问题中提到的那种地址,可以在申请一个总线名称时使用,只需传入一个 dbus.bus.BusConnection
对象,并把这个地址作为参数传进去,像这样:
bus_name = dbus.service.BusName('my.testbus.test', dbus.bus.BusConnection('unix:abstract=/tmp/dbus-vthAiAw4am'))
这样我就可以在这个总线上导出方法和发送信号了。