Vérifiez si Rhythmbox est en cours d'exécution via Python
Question
Je suis en train d'extraire des informations de Rhythmbox via dbus
, mais je veux seulement le faire, si Rhythmbox est en cours d'exécution. Yat-il un moyen de vérifier si Rhythmbox est en cours d'exécution via Python sans démarrer si elle ne fonctionne pas?
Chaque fois que je invoque le code dbus
comme ceci:
bus = dbus.Bus()
obj = bus.get_object("org.gnome.Rhythmbox", "/org/gnome/Rhythmbox/Shell")
iface = dbus.Interface(obj, "org.gnome.Rhythmbox.Shell)
et Rhythmbox ne fonctionne pas, il commence alors il.
Puis-je vérifier par dbus
si Rhythmbox est en cours d'exécution sans démarrer réellement? Ou est-il un autre moyen, autre que l'analyse de la liste des processus en cours d'exécution, de le faire?
La solution
Ceci est similaire à la réponse de Roch oxymoron, mais sans doute plus propre (quoique non vérifiées):
bus = dbus.SessionBus()
if bus.name_has_owner('org.gnome.Rhythmbox'):
# ...
Si vous souhaitez être averti quand Rhythmbox démarre ou arrête, vous pouvez utiliser:
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')
Consultez la documentation pour dbus.bus. BusConnection pour plus de détails.
Autres conseils
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()