dbus-python服务实现及introspection功能

演示代码:点击打开链接


话说dbus-python很强大,可以通过python轻松地实现一个dbus服务,供其它程序调用或与之交互。那么如何让QT通过proxy方式调用python实现的dbus服务呢?

 

这就要借助dbus-pythoninspect功能了。

比如通过dbus-python注册了一个名为com.foxbryant.demo的服务,通过d-feet查看结果如下:



一、生成D-Bus xml

将如下内容写到dbus-introspection.py,然后运行./dbus-introspection.py >demo.xml

详细可参考:https://en.wikibooks.org/wiki/Python_Programming/Dbus

 

#!/usr/bin/env python

 

import dbus

 

bus = dbus.SystemBus()

hal_manager_object = bus.get_object(

    'com.foxbryant.demo',          # service

    '/Device'  # published object

)

 

introspection_interface = dbus.Interface(

    hal_manager_object,

    dbus.INTROSPECTABLE_IFACE,

)

 

# Introspectable interfaces define a property 'Introspect' that

# will return an XML string that describes the object's interface

interface = introspection_interface.Introspect()

print interface

 

此方法适用于生成任何d-bus对象的D-Bus xml


[补充]

嫌上述方法太麻烦? 当然有更简单的方法:

每个D-bus对象都有一个叫"org.freedesktop.DBus.Introspectable"的Interface(请看上面的附图), 一个简单的生成接口xml的方法是打开d-feet, 找到目标对象,展开org.freedesktop.DBus.Introspectable接口,里面有个"Introspect"的method,双击它,让后在弹出对话框中点击"Execute"就可以了.

 

二、使用qdbusxml2cpp工具从D-Bus xml生成QDBusInterface的类

qdbusxml2cpp  demo.xml -p demo_interface

 

此命令会生成一个代表com.foxbryant.demo.Pcie  Interface的类ComFoxbryantDemoPcieInterface,然后就可以在QT中通过此类定义对象并调用相关刻录等接口了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值