4

経由で 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 が実行されていない場合は、Rhythmbox が起動します。

dbus実際に Rhythmbox を起動せずに、Rhythmbox が実行されているかどうかを確認することはできますか? または、現在実行中のプロセスのリストを解析する以外に、そうする方法はありますか?

4

2 に答える 2

5

これは Rosh Oxymoron の答えに似ていますが、間違いなくよりきちんとしています (テストされていませんが):

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 のドキュメントを参照してください。

于 2011-01-13T21:11:01.590 に答える
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()
于 2011-01-08T20:47:23.493 に答える