python - 如何使用 Python 在自定义 dbus 上导出对象?

标签 python dbus

我想在自定义总线(即不是 SessionBus 或 SystemBus)上提供 dbus 方法和信号。如果我从命令行启动 dbus-daemon 的测试副本,如 dbus-daemon man page 中所述,像这样:

dbus-daemon --session --print-address

然后这将返回例如地址:

unix:abstract=/tmp/dbus-vthAiAw4am,guid=60da6b6ef244a0dbdb9710a800002218

我可以在 d-feet 中使用这个地址来“连接到其他总线”,但那里什么也没有。现在,我想在该总线上声明一个名称并导出对象以使用 Python 提供 dbus 方法和信号。我曾尝试阅读 dbus.service.BusName 背后的代码,我通常会在其中传递 session 或系统总线,但我只是迷路了。任何人都知道如何做到这一点(如果可能的话)?

最佳答案

查看 d-feet 的源代码当然比浏览整个 dbus-python 库更容易找到答案。通过传入一个带有地址作为参数的 dbus.bus.BusConnection 对象,可以在声明总线名称时使用问题中的地址,如下所示:

bus_name = dbus.service.BusName('my.testbus.test', 
    dbus.bus.BusConnection('unix:abstract=/tmp/dbus-vthAiAw4am'))

然后我可以导出方法并在此总线上发出信号。

关于python - 如何使用 Python 在自定义 dbus 上导出对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135263/

相关文章:

c++ - 如何使用 C 编程从 dbus 传递/返回结构?

python - CVLC 无法连接到 D-Bus session

python - matplotlib 后端在 nginx 服务器上使用时错误地组合了多个图形

python - 在 Cython 中将 C++ vector 转换为 numpy 数组而无需复制

python - Google Maps API 未检索所有商店结果

c - Bluez D 总线 : Bluetooth speaker Play/Pause/Next/Previous button handling

linux - zbus 连接未显示在busctl 列表中

python - 如何使用python动态地将方法导出到dbus,而不需要静态装饰器?

python - 如何在两个 Pandas DataFrame 对象上执行 SQL 样式不相交或设置差异?

python - 将 float 更改为不带小数位的字符串