【问题标题】:Cannot call klipper methods in dbus with python无法使用 python 在 dbus 中调用 klipper 方法
【发布时间】:2011-03-01 15:29:25
【问题描述】:

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

解决问题。

我希望这篇文章对某人有所帮助

【问题讨论】:

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

标签: python dbus


【解决方案1】:

经过一番尝试,我发现了错误: &gt;&gt;&gt; proxy = bus.get_object("org.kde.klipper","/org/kde/klipper") 一定是: &gt;&gt;&gt; proxy = bus.get_object("org.kde.klipper","/klipper") 这解决了问题

【讨论】:

    【解决方案2】:

    看起来很吓人。通过bash 调用qdbus 可能更简单:

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

    0 表示当前选择,1 表示后续选择 - 以此类推。

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 2012-07-17
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2014-04-30
      • 2016-06-10
      • 2012-11-25
      相关资源
      最近更新 更多