无法使用 python 调用 dbus 中的 klipper 方法

发布于 2024-10-19 15:35:11 字数 1792 浏览 5 评论 0原文

我尝试使用 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")

解决了问题。

我希望这篇文章可以帮助别人

I try to call methods from klipper bus with python. But I could not make it. Here is what i try:

>>> 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'

As you can see it sets both proxy and interface. But I cannot call methods via this interface.

What can I do? What am i doing wrong?

Edit Solved:

Well when i look to "qdbusviewer" I saw the exact path of klipper.
So changing

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

this line with this:

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

Solves the problem.

I hope this post help someone

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉栀 2024-10-26 15:35:11

经过一番尝试,我发现了错误:
<代码>>> proxy = bus.get_object("org.kde.klipper","/org/kde/klipper")
必须是:
<代码>>> proxy = bus.get_object("org.kde.klipper","/klipper")
这解决了问题

After some try, I found the the mistake:
>>> proxy = bus.get_object("org.kde.klipper","/org/kde/klipper")
must be:
>>> proxy = bus.get_object("org.kde.klipper","/klipper")
this solved the problem

贩梦商人 2024-10-26 15:35:11

看起来相当可怕。通过 bash 调用 qdbus 可能会更简单:

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

0 表示当前选择,1 表示下一个选择 - 依此类推。

Looks quite scarry. It might be simpler to call qdbus through bash:

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

0 is for current selection, 1 is for following one - and so on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文