Überprüfen Sie, ob Rhythmbox über Python läuft
Frage
Ich versuche, Informationen von Rhythmbox über dbus
zu extrahieren, aber ich will nur so tun, 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?
Wenn ich dann den Ausruf dbus
Code wie folgt:
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, ohne es tatsächlich zu beginnen läuft? Oder gibt es eine andere Möglichkeit, andere als die Liste der laufenden Prozesse Parsen, dies zu tun?
Lösung
Dies ist ähnlich 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:
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')
Sehen Sie die Dokumentation für dbus.bus. Busanbindung für weitere Details.
Andere Tipps
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()