【发布时间】:2013-05-21 05:45:22
【问题描述】:
(我知道这类似于 Python and d-bus: How to set up main loop? ,但“答案”中没有完整的代码,我无法弄清楚我哪里出错了。这可能只是 Skype 中的一个变化)
这是我的程序:
import gobject
import dbus
import dbus.mainloop.glib
dbus_gmainloop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
sessbus = dbus.SessionBus()
skype = sessbus.get_object('com.Skype.API', '/com/Skype')
skypec = sessbus.get_object('com.Skype.API', '/com/Skype/Client')
skype_iface = dbus.Interface(skype, dbus_interface='com.Skype.API')
skype_iface.Invoke("NAME py1")
# ... waits for user click in Skype ...
#==> dbus.String(u'OK')
skype_iface.Invoke("PROTOCOL 7")
#==> dbus.String(u'PROTOCOL 7')
def got_signal(sender, destination, member, interface, path):
print "got_signal(sender=%s, dest=%s, member=%s, iface=%s, path=%s)" \
% (sender, destination, member, interface, path)
skypec.connect_to_signal('Notify', got_signal, sender_keyword='sender', \
destination_keyword='destination', member_keyword='member', \
interface_keyword='interface', path_keyword='path')
mainloop = gobject.MainLoop()
mainloop.run()
运行时(例如python skype-call.py),它在向 Skype 发送NAME py1 命令后暂停并等待 Skype UI 中的交互式确认,然后继续。因此,skype_iface 对象显然至少在一定程度上是有效的。
但是,python 然后会发出以下错误:
ERROR:dbus.proxies:Introspect error on :1.152:/com/Skype/Client: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownObject: No such object path '/com/Skype/Client'
我还尝试了以下方法(而不是 connect_to_signal,就在最后开始 gobject 主循环之前):
def receiver(x, **kwargs):
print "receiver(%s)" % (x,)
sessbus.add_signal_receiver(receiver, signal_name='Notify', \
dbus_interface='com.Skype.API', bus_name='com.Skype.API', path='/com/Skype/Client')
虽然它没有抱怨,但它永远不会被调用。我尝试向 Skype 用户发送消息。什么样的事件应该触发它?
https://dev.skype.com/desktop-api-reference#DBUSUsage 的文档并不是很有帮助。
这是基于 Debian 7.0 多架构 (amd64/i386) 的 Skype for Linux 4.2.0.11。
【问题讨论】:
标签: python skype dbus pygobject