Проверьте, работает ли Rhythmbox через Python - PullRequest
4 голосов
/ 08 января 2011

Я пытаюсь извлечь информацию из Rhythmbox через dbus, но я хочу это делать, только если Rhythmbox работает. Есть ли способ проверить, работает ли Rhythmbox через Python, не запуская его, если он не запущен?

Всякий раз, когда я вызываю код dbus, например:

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

и Rhythmbox не работает, затем запускает его.

Могу ли я проверить с помощью dbus, работает ли Rhythmbox без его фактического запуска? Или есть ли другой способ, кроме анализа списка запущенных в данный момент процессов, сделать это?

Ответы [ 2 ]

5 голосов
/ 14 января 2011

Это похоже на ответ Рош Оксиморон, но, возможно, аккуратнее (хотя и не проверено):

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

Если вы хотите получать уведомления о запуске или остановке Rhythmbox, вы можете использовать:

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

Подробнее см. Документацию для dbus.bus.BusConnection .

1 голос
/ 08 января 2011
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()
...