我正在尝试通过Rhythmbox提取信息 dbus, ,但是如果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)

并且节奏框未运行,然后启动它。

我可以通过 dbus 如果Rhythmbox正在运行而没有真正启动它?还是除了解析当前运行过程的列表之外,还有其他方法吗?

有帮助吗?

解决方案

这类似于Rosh oxymoron的回答,但可以说是整洁的(尽管未经测试):

bus = dbus.SessionBus()
if bus.name_has_owner('org.gnome.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的文档 更多细节。

其他提示

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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top