python中的多个d-bus会话总线对象

时间:2010-09-23 09:01:48

标签: python dbus

我写了一个脚本,连接到远程计算机上的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的第二次调用返回与第一次调用相同的对象。即。在这种情况下,两个对象都引用192.168.0.1上的会话总线。 似乎只有第一次调用SessionBus实际上做了什么,所有后续调用只返回在第一次调用时创建的对象。有没有人知道解决这个问题?

2 个答案:

答案 0 :(得分:2)

回想起来,这是一个令人困惑的问题。 会话总线或系统总线或任何其他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")

答案 1 :(得分:0)

在Python / DBUS源代码中,我注意到在_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)会有所作为吗?