我在Ubuntu 16.04上使用Python Dbus。 我想返回一个DBus字典列表到我的客户端,但似乎只能返回一个string数组。 如果我将我的dbus签名装饰器更改为“as {v}”,则会出现exception:“ValueError:损坏types签名”。 如何返回DBus上的字典列表?
@dbus.service.method("com.example.service.BtScanList", in_signature='', out_signature='as') def getScanList(self): btMsg("Starting BT Scan List...") # Populate device lists ( returns dictionary --> { 'mac_address' : xxx , 'name' : xxx } self.discoveredDevs = self.getScannedDevices() returnList = [] for dev in self.discoveredDevs: returnList.append(dev["name"]) return returnList
编辑:这也不工作:
@dbus.service.method("com.example.service.BtScanList", in_signature='', out_signature='a{sv}') def getScanList(self): btMsg("Starting BT Scan List...") # Populate device lists ( returns dictionary --> { 'mac_address' : xxx , 'name' : xxx } self.discoveredDevs = self.getScannedDevices() returnList = dbus.Array() for dev in self.discoveredDevs: btMsg(dev) returnList.append(dbus.Dictionary(dev, signature='sv')) return returnList
我明白了,答案在这里:
@dbus.service.method("com.example.service.BtPairedList", in_signature='', out_signature='aa{ss}') def getPairedList(self): btMsg("Starting BT Paired List...") # Populate device lists ( returns dictionary --> { 'mac_address' : xxx , 'name' : xxx } self.pairedDevs = self.getPairedDevices() returnList = dbus.Array() for dev in self.pairedDevs: btMsg(dev) returnList.append(dbus.Dictionary(dev, signature='sv')) return returnList