1

我编写了一个脚本,它连接到远程计算机上的 d-bus 会话总线,如下所示:

os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.1,port=1234"
bus = dbus.SessionBus()

这很好,除了现在我需要能够连接到不同计算机上的多个会话总线。我尝试了以下方法:

os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.1,port=1234"
bus1 = dbus.SessionBus()
os.environ["DBUS_SESSION_BUS_ADDRESS"] = "tcp:host=192.168.0.2,port=1234"
bus2 = dbus.SessionBus()

但它不起作用。第二次调用 SessionBus 返回与第一次调用相同的对象。IE。在这种情况下,两个对象都指向 192.168.0.1 上的会话总线。似乎只有对 SessionBus 的第一次调用实际上做了任何事情,所有后续调用只返回第一次调用时创建的对象。有谁知道解决这个问题的方法?

4

2 回答 2

3

回想起来,这是一个令人困惑的问题。会话总线或系统总线或任何其他 d-bus 之间没有根本区别。如果您想连接到特定地址的总线,只需使用 dbus.bus.BusConnection:

bus1 = dbus.bus.BusConnection("tcp:host=192.168.0.1,port=1234")
bus2 = dbus.bus.BusConnection("tcp:host=192.168.0.2,port=1234")
于 2011-04-29T05:40:40.983 回答
1

在 Python/DBUS 源代码中四处寻找,我注意到 in_dbus.py接受SessionBus.__new__一个private布尔参数:

`private` : bool
    If true, never return an existing shared instance, but instead
    return a private connection.

有什么bus = dbus.SessionBus(private=True)不同吗?

于 2010-09-23T09:08:45.693 回答