2017-08-02 10 views
2

私はUbuntu 16.04でPython Dbusを使用しています。私はクライアントにDBusを介して辞書のリストを返すが、文字列の配列を返すことしかできないようだ。 dbusの署名デコレータを「as {v}」に変更した場合、「ValueError:型の破損」という例外が発生します。 DBus上で辞書のリストを返すにはどうすればいいですか?dbus-python辞書の配列を返す方法

@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 

EDIT:これも動作しません:

@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 

答えて

1

が、私はそれを考え出した、答えはここにある:

@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 
関連する問題