无法在Python中通过dbus调用klipper方法

3 投票
2 回答
1639 浏览
提问于 2025-04-16 12:45

我尝试用Python从klipper总线调用方法,但一直没成功。以下是我尝试的代码:

>>> import dbus
>>> bus = dbus.SessionBus()
>>> proxy = bus.get_object("org.kde.klipper","/org/kde/klipper")
>>> print proxy
<ProxyObject wrapping <dbus._dbus.SessionBus (session) at 0x7fc249da3bf0> :1.67 /org/kde/klipper at 0x7fc249dc16d0>
>>> iface = dbus.Interface(proxy,"org.kde.klipper.klipper")
>>> print iface
<Interface <ProxyObject wrapping <dbus._dbus.SessionBus (session) at 0x7fc249da3bf0> :1.67 /org/kde/klipper at 0x7fc249dc16d0> implementing 'org.kde.klipper.klipper' at 0x7fc249dc1790>
>>> print iface.getClipboardContents()
ERROR:dbus.proxies:Introspect error on :1.67:/org/kde/klipper: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownObject: No such object path '/org/kde/klipper'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/dbus/proxies.py", line 68, in __call__
    return self._proxy_method(*args, **keywords)
  File "/usr/lib/python2.6/site-packages/dbus/proxies.py", line 140, in __call__
    **keywords)
  File "/usr/lib/python2.6/site-packages/dbus/connection.py", line 622, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownObject: No such object path '/org/kde/klipper'

如你所见,这段代码设置了代理和接口。但我无法通过这个接口调用方法。

我该怎么办呢?我哪里做错了?

编辑:问题解决了:

当我查看“qdbusviewer”时,发现了klipper的确切路径。

所以我把这行代码:

>> proxy = bus.get_object("org.kde.klipper","/org/kde/klipper")

换成了这行:

>>> proxy = bus.get_object("org.kde.klipper","/klipper")

这样就解决了问题。

希望这个帖子能帮助到其他人。

2 个回答

0

看起来有点吓人。通过 bash 调用 qdbus 可能会简单一些:

import os
system("qdbus org.kde.klipper /klipper getClipboardHistoryItem 0")

这里的 0 代表当前选中的项,1 代表下一个选中的项,依此类推。

1

经过一番尝试,我发现了错误所在:>>> proxy = bus.get_object("org.kde.klipper","/org/kde/klipper") 这行代码应该改成:>>> proxy = bus.get_object("org.kde.klipper","/klipper") 这样就解决了问题。

撰写回答