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?

Était-ce utile?

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top