Domanda

Sto cercando di estrarre informazioni da Rhythmbox via dbus, ma voglio solo fare così, se Rhythmbox è in esecuzione. C'è un modo per verificare se Rhythmbox è in esecuzione tramite Python senza avviare, se non è in esecuzione?

Ogni volta invoco il codice dbus in questo modo:

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

e Rhythmbox non è in esecuzione, poi avvia.

Posso controllare tramite dbus se Rhythmbox è in esecuzione senza effettivamente avviarlo? O c'è qualche altro modo, diverso da quello parsing l'elenco dei processi attualmente in esecuzione, di farlo?

È stato utile?

Soluzione

Questo è simile alla risposta di Rosh Oxymoron, ma probabilmente più ordinato (anche se non testata):

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

Se si desidera ricevere una notifica quando Rhythmbox si avvia o si ferma, si può usare:

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')

Vedere la documentazione per dbus.bus. BusConnection per maggiori dettagli.

Altri suggerimenti

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top