Pregunta

Estoy tratando de extraer información de Rhythmbox través dbus, pero yo sólo quiero hacerlo, si se está ejecutando Rhythmbox. ¿Hay una manera de comprobar si se está ejecutando a través de Rhythmbox Python sin iniciarlo si no se está ejecutando?

Cada vez que invoco el código dbus como esto:

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

y Rhythmbox no se está ejecutando, entonces se inicia.

¿Puedo comprobar a través de dbus si Rhythmbox se está ejecutando sin tener que ponerlo en marcha? O hay alguna otra manera, aparte de analizar la lista de procesos actualmente en ejecución, para hacerlo?

¿Fue útil?

Solución

Esto es similar a la respuesta de Rosh contradicción, pero sin duda más limpio (aunque no probado):

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

Si desea ser notificado cuando Rhythmbox inicia o se detiene, puede utilizar:

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

Consulte la documentación de para dbus.bus. BusConnection para más detalles.

Otros consejos

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top