Python pydbus:如何发布对象?
我想使用pydbus和python2.7在会话总线上发布一个python对象。我是pydbus新手,所以我坚持使用这个示例并完成了教程。然而,我没有成功地用pydbus启动一个简单的测试服务器 我编写了一个简单的类,只有一个返回字符串的方法。我指定了一个接口并创建了一个事件循环 代码:Python pydbus:如何发布对象?,python,python-2.7,dbus,Python,Python 2.7,Dbus,我想使用pydbus和python2.7在会话总线上发布一个python对象。我是pydbus新手,所以我坚持使用这个示例并完成了教程。然而,我没有成功地用pydbus启动一个简单的测试服务器 我编写了一个简单的类,只有一个返回字符串的方法。我指定了一个接口并创建了一个事件循环 代码: from pydbus import SessionBus from gi.repository import GObject loop = GObject.MainLoop() class Testclas
from pydbus import SessionBus
from gi.repository import GObject
loop = GObject.MainLoop()
class Testclass(object):
"""
<node>
<interface name='org.philipp.DBUSTutorial'>
<method name='helloworld'>
<arg type='s' name='reply' direction='out'/>
</method>
</interface>
</node>
"""
def helloworld():
return "Hello World"
bus = SessionBus()
bus.publish("org.philipp.DBUSTutorial", Testclass())
loop.run()
Traceback (most recent call last):
File "test.py", line 24, in <module>
bus.publish("org.philipp.DBUSTutorial", Testclass())
File "/usr/local/lib/python2.7/dist-packages/pydbus/publication.py", line 33, in publish
return Publication(self, bus_name, *objects)
File "/usr/local/lib/python2.7/dist-packages/pydbus/publication.py", line 26, in __init__
self._at_exit(bus.register_object(path, object, node_info).__exit__)
File "/usr/local/lib/python2.7/dist-packages/pydbus/registration.py", line 123, in register_object
return ObjectRegistration(self.con, path, interfaces, wrapper, own_wrapper=True)
File "/usr/local/lib/python2.7/dist-packages/pydbus/registration.py", line 103, in __init__
ids = [con.register_object(path, interface, wrapper.call_method, wrapper.get_property, wrapper.set_property) for interface in interfaces]
TypeError: argument vtable: Expected Gio.DBusInterfaceVTable, but got pydbus.registration.instancemethod
从pydbus导入SessionBus
从gi.repository导入GObject
loop=GObject.MainLoop()
类Testclass(对象):
"""
"""
def helloworld():
返回“你好,世界”
总线=会话总线()
publish(“org.philipp.DBUSTutorial”,Testclass())
loop.run()
执行脚本后,它会抛出一个错误
错误消息:
from pydbus import SessionBus
from gi.repository import GObject
loop = GObject.MainLoop()
class Testclass(object):
"""
<node>
<interface name='org.philipp.DBUSTutorial'>
<method name='helloworld'>
<arg type='s' name='reply' direction='out'/>
</method>
</interface>
</node>
"""
def helloworld():
return "Hello World"
bus = SessionBus()
bus.publish("org.philipp.DBUSTutorial", Testclass())
loop.run()
Traceback (most recent call last):
File "test.py", line 24, in <module>
bus.publish("org.philipp.DBUSTutorial", Testclass())
File "/usr/local/lib/python2.7/dist-packages/pydbus/publication.py", line 33, in publish
return Publication(self, bus_name, *objects)
File "/usr/local/lib/python2.7/dist-packages/pydbus/publication.py", line 26, in __init__
self._at_exit(bus.register_object(path, object, node_info).__exit__)
File "/usr/local/lib/python2.7/dist-packages/pydbus/registration.py", line 123, in register_object
return ObjectRegistration(self.con, path, interfaces, wrapper, own_wrapper=True)
File "/usr/local/lib/python2.7/dist-packages/pydbus/registration.py", line 103, in __init__
ids = [con.register_object(path, interface, wrapper.call_method, wrapper.get_property, wrapper.set_property) for interface in interfaces]
TypeError: argument vtable: Expected Gio.DBusInterfaceVTable, but got pydbus.registration.instancemethod
回溯(最近一次呼叫最后一次):
文件“test.py”,第24行,在
publish(“org.philipp.DBUSTutorial”,Testclass())
文件“/usr/local/lib/python2.7/dist packages/pydbus/publication.py”,第33行,在publish中
返回发布(自身、总线名称、*对象)
文件“/usr/local/lib/python2.7/dist packages/pydbus/publication.py”,第26行,在__
self.\u在\u出口(总线.寄存器\u对象(路径,对象,节点\u信息)。\u出口\u)
文件“/usr/local/lib/python2.7/dist packages/pydbus/registration.py”,第123行,在register_对象中
返回ObjectRegistration(self.con、path、interfaces、wrapper、own_wrapper=True)
文件“/usr/local/lib/python2.7/dist packages/pydbus/registration.py”,第103行,在__
ids=[接口中接口的con.register\u对象(路径、接口、wrapper.call\u方法、wrapper.get\u属性、wrapper.set\u属性)]
TypeError:参数vtable:应为Gio.DBusInterfaceVTable,但得到了pydbus.registration.instancemethod
我做错了什么?如果有人能帮我找到错误,那就太好了。要注册dbus对象:
import dbus
bus = dbus.SessionBus()
class Foo(dbus.service.Object):
"""
"""
def __init__(self, path):
super(Foo, self).__init__(bus, path)
# A method
@dbus.service.method(<dbus_interface_name>,
in_signature="", out_signature="")
def foo(self):
pass
导入dbus
bus=dbus.SessionBus()
类Foo(dbus.service.Object):
"""
"""
定义初始化(自身,路径):
超级(Foo,self)。\uuuuu初始化\uuuuu(总线,路径)
#方法
@dbus.service.method(,
输入签名=”,输出签名=”)
def foo(self):
通过
要注册dbus对象:
import dbus
bus = dbus.SessionBus()
class Foo(dbus.service.Object):
"""
"""
def __init__(self, path):
super(Foo, self).__init__(bus, path)
# A method
@dbus.service.method(<dbus_interface_name>,
in_signature="", out_signature="")
def foo(self):
pass
导入dbus
bus=dbus.SessionBus()
类Foo(dbus.service.Object):
"""
"""
定义初始化(自身,路径):
超级(Foo,self)。\uuuuu初始化\uuuuu(总线,路径)
#方法
@dbus.service.method(,
输入签名=”,输出签名=”)
def foo(self):
通过
如自述文件中所述:
自0.5以来,它支持在总线上发布对象,但这需要GLib 2.46或更高版本
不幸的是,无法发布具有旧GLib的对象。如自述文件中所述:
自0.5以来,它支持在总线上发布对象,但这需要GLib 2.46或更高版本
不幸的是,没有办法发布具有旧GLib的对象