D-Bus D-Feet 发送字符串字典,Python 语法变体
Posted
技术标签:
【中文标题】D-Bus D-Feet 发送字符串字典,Python 语法变体【英文标题】:D-Bus D-Feet Send Dictionary of String,Variants in Python Syntax 【发布时间】:2013-05-20 09:56:39 【问题描述】:我正在尝试使用 D-Feet 为 ConnMan 发送 D-Bus 命令。 D-Feet 说所有参数都应该在“Python 语法”中。
D-Bus 将 D-Bus 方法描述为:
ConnectProvider(Dict of String,Variant provider) => (Object Path path)
这些我都试过了(Python 字典):
u'Type': u'wifi', u'Mode': u'managed', u'SSID': u'testSSID', u'Security': u'WPA', u'Passphrase': u'test'
'Type': 'wifi', 'Mode': 'managed', 'SSID': 'testSSID', 'Security': 'WPA', 'Passphrase': 'test'
"Type": "wifi", "Mode": "managed", "SSID": "testSSID", "Security": "WPA", "Passphrase": "test"
"Type":__import__('dbus').String("wifi", variant_level=1),"Mode":__import__('dbus').String("managed", variant_level=1),"SSID":__import__('dbus').String("testSSID", variant_level=1),"Security":__import__('dbus').String("WPA", variant_level=1),"Passphrase":__import__('dbus').String("test", variant_level=1)
但我不断收到错误“无效参数”:
我有 dbus-monitor --system 正在运行,所以我可以查看系统总线上发生的任何事情,但是当我单击“执行”时,实际上没有任何内容发送到总线。我立即得到错误,所以我假设 D-Feet 说输入的格式不正确。
我做错了什么?我怎样才能发送这个命令?谢谢!
【问题讨论】:
【参考方案1】:我让它在 D-Feet 中作为“方法输入”工作到采用 asv 的方法:
"key": __import__('gi.repository.GLib', globals(), locals(), ['Variant']).Variant("s", "value")
【讨论】:
【参考方案2】:使用 d-feet 0.3.6,有一种方法无需显式导入 GLib。 它可能对一些未来的读者有用。
对于带有参数签名的方法:
asv 是 String,Variant 的字典这里是输入格式:
<key> : GLib.Variant(<type-code>, <value>)
具有多个键值对的一些示例:
"key1" : GLib.Variant("s", "string value"),
"key2" : GLib.Variant("b", False),
"key3" : GLib.Variant("(di)", (1.2, 42))
key1 的值是一个包含字符串值的变量
key2 的值是一个包含布尔值的变量
key3 的值是一个包含 (double, int32) 结构的变体
【讨论】:
以上是关于D-Bus D-Feet 发送字符串字典,Python 语法变体的主要内容,如果未能解决你的问题,请参考以下文章
linux 进程间通信 dbus-glib实例详解一(附代码)(d-feet工具使用)
如何为 D-Bus 方法创建 String, Variant 的字典?
使用 GDBus 通过 D-Bus 发送字节数组(类型为 `ay`)
蓝牙问题使用 D-Bus (qdbus) 发送 AVRCP 卷更改发送与 org.bluez.MediaTransport1