2010-09-23 57 views
1

我已經寫了連接到d-總線會議總線腳本在遠程計算機上,像這樣:多個d-總線的Python會話總線對象

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

這是一個令人困惑的問題,回想起來。 會話總線或系統總線或任何其他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") 
0

在Python/DBUS源閒逛,我注意到在_dbus.pySessionBus.__new__需要一個private布爾參數:

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

是否bus = dbus.SessionBus(private=True)有所作爲?

+0

謝謝。幾天之後,我纔有機會測試它,但這聽起來很有希望。 – Shum 2010-09-23 13:02:14

+0

不幸的是沒有工作。兩個總線對象仍然使用相同的IP地址進行通話。 – Shum 2010-09-28 01:24:06