【问题标题】:multiple d-bus session bus objects in pythonpython中的多个d-bus会话总线对象
【发布时间】:2011-04-16 03:54:02
【问题描述】:

我编写了一个脚本,可以连接到远程计算机上的 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 的第一次调用实际上做了任何事情,所有后续调用只返回第一次调用时创建的对象。有谁知道解决这个问题的方法吗?

【问题讨论】:

    标签: python dbus


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    查看 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) 有影响吗?

    【讨论】:

    • 谢谢。我现在有机会测试它还需要几天的时间,但这听起来很有希望。
    • 不幸的是没有工作。两个总线对象仍然使用相同的 IP 地址。
    猜你喜欢
    • 2011-09-23
    • 2018-12-09
    • 2019-10-05
    • 2010-12-31
    • 2023-03-31
    • 2012-03-18
    • 1970-01-01
    • 2019-01-19
    • 2018-03-16
    相关资源
    最近更新 更多