gpt4 book ai didi

python - python 中的 dbus-send 版本

转载 作者:行者123 更新时间:2023-12-01 04:31:34 24 4
gpt4 key购买 nike

我有一个有效的 dbus-send 调用:

#                                   OBJECT          INTERFACE        .MEMBER  CONTENT
dbus-send --system --dest=org.bluez /org/bluez/hci0 org.bluez.Adapter.SetMode string:discoverable

现在我正在尝试在 python 中做同样的事情,但是由于文档很坑爹,尽管我尝试了所有可以想到的排列,但我得到的都是最后步骤中的错误。

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.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: Method "SetMode" with signature "s" on interface "org.bluez.Adapter" doesn't exist

我还没有找到一种方法来告诉我存在什么签名的方法,而且这个错误消息似乎与初始 dbus-send 调用相矛盾,这证明了“org.bluez.Adapter.SetMode(s)”存在。

最佳答案

我通过查看 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 .

关于python - python 中的 dbus-send 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com