4

我正在尝试通过 Rhythmbox 从 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 没有运行,然后启动它。

我可以通过检查dbusRhythmbox 是否正在运行而不实际启动它吗?或者除了解析当前正在运行的进程列表之外,还有其他方法吗?

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 回答