Python+D-Bus+BlueZ 5: 无法读取对象属性?
这是关于Gentoo Linux的内容。
我想知道我的蓝牙耳机是否连接上了BlueZ 5。
我看过freedesktop.org上的D-Bus“文档”,但是感觉这些资料要么过时,要么不完整,或者两者都有。我也试着理解bluez.org上那点可怜的信息,但没什么收获。
我尝试了以下操作:
Python 2.7.6 (default, Apr 26 2014, 11:38:54)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dbus
>>> bus = dbus.SystemBus()
>>> obj = bus.get_object( "org.bluez", '/org/bluez/hci0/dev_00_18_91_D0_7A_24' )
>>> iface = dbus.Interface( obj, "org.bluez.Device1" )
>>> print iface.Connected
<dbus.proxies._DeferredMethod instance at 0x236e2d8>
我原以为“连接”是设备的一个属性,但它却是一个_DeferredMethod?那我该怎么获取这个属性的值呢?
2 个回答
2
DBus的属性是通过调用一个叫做Get的方法间接访问的。你可以参考这个链接了解更多信息。
4
下面是通过 D-Bus API 从蓝牙设备读取属性的方法:
#!/usr/bin/env python3
import dbus
bus = dbus.SystemBus()
adapter_object = bus.get_object('org.bluez', '/org/bluez/hci0')
adapter = dbus.Interface(adapter_object, 'org.bluez.Adapter1')
device_object = bus.get_object("org.bluez", "/org/bluez/hci0/dev_FC_52_6E_8E_87_06")
device = dbus.Interface(device_object, "org.bluez.Device1")
device_properties = dbus.Interface(device, "org.freedesktop.DBus.Properties")
print(device_properties.Get("org.bluez.Device1", "Name"))
print(device_properties.Get("org.bluez.Device1", "Connected"))