Python代码:检查Rhythmbox是否正在运行

4

我正在尝试通过dbus从Rhythmbox中提取信息,但只有在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

这与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的文档以获取更多详细信息。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接