Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pydbus:如何发布对象?_Python_Python 2.7_Dbus - Fatal编程技术网

Python 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

我想使用pydbuspython2.7在会话总线上发布一个python对象。我是pydbus新手,所以我坚持使用这个示例并完成了教程。然而,我没有成功地用pydbus启动一个简单的测试服务器

我编写了一个简单的类,只有一个返回字符串的方法。我指定了一个接口并创建了一个事件循环

代码:

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的对象