簡體   English   中英

python中的dbus發送版本

[英]dbus-send version in python

我有一個有效的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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM