通过Python检查Rhythmbox是否在运行

4 投票
2 回答
1695 浏览
提问于 2025-04-16 09:38

我想通过 dbus 从 Rhythmbox 获取一些信息,但前提是 Rhythmbox 必须在运行中。我想知道有没有办法用 Python 检查 Rhythmbox 是否在运行,而不去启动它。

每当我这样调用 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 个回答

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()
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的文档

撰写回答