我有一个有效的dbus-send调用:
def get_fieldsets(self, request, obj=None):
fieldsets = super(PersonAdmin, self).get_fieldsets(request, obj)
print(self.form.fields)
fieldsets[0][1]['fields'].extend(['public_groups', 'private_groups'])
return fieldsets
现在我正在尝试在python中做同样的事情,但是由于可怜的文档,尽管我尝试了所有可想到的排列,但我得到的是 last 步骤中的错误。
# OBJECT INTERFACE .MEMBER CONTENT
dbus-send --system --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.SetMode string:discoverable
无论我做什么,错误都是:
import dbus
bus = dbus.SystemBus()
hci0 = bus.get_object('org.bluez', '/org/bluez/hci0')
# everything good so far
# v1
hci0_setmode = hci0.get_dbus_method('SetMode', 'org.bluez.Adapter')
hci0_setmode('discoverable')
# v2
iface = dbus.Interface(hci0, 'org.bluez.Adapter')
iface.SetMode('discoverable')
# v3
iface = dbus.Interface(hci0, 'org.bluez.Adapter')
hci0_setmode =iface.get_dbus_method('SetMode', 'org.bluez.Adapter')
hci0_setmode('discoverable')
我还没有找到方法告诉我什么签名存在什么方法,除了这个错误信息似乎与初始dbus-send调用相矛盾,这证明了“org.bluez.Adapter.SetMode(s)”存在。
答案 0 :(得分:1)
我通过查看api找到了解决方案:
dbus-send --system --dest=org.bluez --type=method_call --print-reply /org/bluez/hci0 org.freedesktop.DBus.Introspectable.Introspect
这是python代码:
import dbus
bus = dbus.SystemBus()
hci0 = bus.get_object('org.bluez', '/org/bluez/hci0')
props = dbus.Interface(hci0, 'org.freedesktop.DBus.Properties')
props.Set('org.bluez.Adapter1', 'Discoverable', True)
我仍然不确定为什么初始的dbus-send命令工作。我可以在其他地方找到对SetMode的唯一引用:http://svn.openmoko.org/developers/erin_yueh/bt/bt_adapter.py。