2011-01-08 18 views
4

Ich versuche Informationen aus Rhythmbox über dbus zu extrahieren, aber ich möchte nur, wenn Rhythmbox läuft. Gibt es eine Möglichkeit zu überprüfen, ob Rhythmbox über Python läuft, ohne es zu starten, wenn es nicht läuft?Überprüfen, ob Rhythmbox über Python läuft

Jedes Mal, wenn ich den dbus Code wie folgt aufrufen:

bus = dbus.Bus() 
obj = bus.get_object("org.gnome.Rhythmbox", "/org/gnome/Rhythmbox/Shell") 
iface = dbus.Interface(obj, "org.gnome.Rhythmbox.Shell) 

und Rhythmbox nicht ausgeführt wird, beginnt es dann.

Kann ich über dbus überprüfen, ob Rhythmbox läuft, ohne es tatsächlich zu starten? Oder gibt es eine andere Möglichkeit, als die Liste der aktuell laufenden Prozesse zu analysieren?

Antwort

5

Dies ist ähnlich zu Rosh Oxymoron Antwort, aber wohl ordentlicheres (wenn auch nicht getestet):

bus = dbus.SessionBus() 
if bus.name_has_owner('org.gnome.Rhythmbox'): 
    # ... 

Wenn Sie benachrichtigt werden möchten, wenn Rhythmbox startet oder stoppt, können Sie verwenden:

def rhythmbox_owner_changed(new_owner): 
    if new_owner == '': 
     print 'Rhythmbox is no longer running' 
    else: 
     print 'Rhythmbox is now running' 

bus.watch_name_owner('org.gnome.Rhythmbox') 

Weitere Informationen finden Sie unter documentation for dbus.bus.BusConnection.

1
dbus_main_object = bus.get_object("org.freedesktop.DBus", "/") 
dbus_names = dbus_main_object.ListNames(dbus_interface='org.freedesktop.DBus') 
if 'org.gnome.Rhythmbox' in dbus_names: 
    do_whatever() 
Verwandte Themen