Dbus是IPC进程间调用的简称。目前很多linux版本都支持dbus。可以方便的调用已经注册的service的方法实现自己的应用。尤其是蓝牙应用Bluez编程使用较多。
A: dbus种类:
1:session bus 2:system bus
B: dbus调用其他service的方法:
主要分两步:
1:获取对象(需要知道对应对象的busname和路径)
2:获取对象的接口(需要知道对象和接口名)(dbus上接口是对象方法的集合所以要获取对象的接口)
代码如下:
bus = dbus.SessionBus()
client = dbus.Interface(bus.get_object("org.openobex.client", "/"),"org.openobex.Client")
分析:
获取对象 bus.get_object("org.openobex.client", "/")
"org.openobex.Client" 是接口名,下面就可以利用接口调用方法啦。
可以结合工具d-fee看各个service暴漏的接口。
C: 向dbus export 方法
1: 自己的类首先继承dbus.service.Object. class DBusService(dbus.service.Object)
2:导出对象:
1:告诉dbus-demon自己的名字 . bus_name = dbus.service.BusName('org.me.test', bus=dbus.SessionBus())
2: 告诉dbus-demon自己的路径. dbus.service.Object.__init__(self, bus_name, '/org/me/test')
3: 导出方法:
使用特殊标示符@dbus.service.method(dbus_interface='com.example.Sample',in_signature='v', out_signature='s')
主要告诉方法所属的interface名和输入输出数据类型。