2011-01-08 10 views
4

私はRhythmboxからdbus経由で情報を抽出しようとしていますが、Rhythmboxが動作している場合のみそうしたいと思います。 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() 
関連する問題