2011-01-08 4 views
4

Я пытаюсь извлечь информацию из Rhythmbox через dbus, но я хочу сделать это только в том случае, если Rhythmbox запущен. Есть ли способ проверить, работает ли Rhythmbox через Python, не запуская его, если он не работает?Проверьте, работает ли 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 работает, фактически не запуская его? Или есть ли другой способ, кроме синтаксического анализа списка текущих запущенных процессов, сделать это?

ответ

5

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

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

Для получения более подробной информации см. documentation for dbus.bus.BusConnection.

1
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() 
Смежные вопросы