Я пытаюсь сделать вызов Dbus используя python3.4 и pyqt5.4 на Java написанного демона, подпись демона для метода я звоню является asa{sv}
Как передать массив строк в dbus в PyQt5?
вызова я делаю является
fpiudaemon = QDBusInterface("it.libersoft.FirmapiuDInterface", "/it/libersoft/FirmapiuD", interface='it.libersoft.FirmapiuDInterface' , parent=None)
result = fpiudaemon.call('sign',filepath,options)
Где
print (filepath) -> ['/home/svalo/programmi/devel/pythondeps']
print (options) -> {'pin': '12345678', 'outdir': '/home/svalo/programmi/devel/firmapiu-gui'}
print(type(filepath)) -> <class 'list'>
print(type(options)) -> <class 'dict'>
Однако, когда я контролирую DBUS, что я получаю
method call sender=:1.242 -> dest=it.libersoft.FirmapiuDInterface serial=67 path=/it/libersoft/FirmapiuD; interface=it.libersoft.FirmapiuDInterface; member=sign array [ variant string "/home/svalo/programmi/devel/firmapiu-gui/pythondeps" ] array [ dict entry( string "outdir" variant string "/home/svalo/programmi/devel/firmapiu-gui" ) dict entry( string "pin" variant string "12345678" ) ]
Что я хотел бы получить это
method call sender=:1.242 -> dest=it.libersoft.FirmapiuDInterface serial=67 path=/it/libersoft/FirmapiuD; interface=it.libersoft.FirmapiuDInterface; member=sign array [ string "/home/svalo/programmi/devel/libersoft/firmapiu-gui/pythondeps" ] array [ dict entry( string "outdir" variant string "/home/svalo/programmi/devel/libersoft/firmapiu-gui" ) dict entry( string "pin" variant string "12345678" ) ]
То есть я ожидаю питон отправить массив строк, и вместо этого он посылает массив вариантов, содержащих строку.
Демон разви написал простой клиент в Java и работает чествования подпись
Что я здесь отсутствует?
Хорошо, я судимое 'arrfoo = ByteArray, ('строка', 'UTF-8')' и вызова результат с 'arrfoo' вместо filepath как аргумент, но он дает« Marshalling failed: Unregistered type PyQt_PyObject, переданный в аргументы », даже не доходя до dbus – svalo
@svalo. Возможно, вам придется использовать 'QByteArray' (см. Мой обновленный ответ). Я не могу проверить это сам, так что извините за догадки. Кажется странным, что PyKt автоматически не обрабатывается - может быть, где-то есть ошибка? – ekhumoro
Хорошо, спасибо. Я попробовал 'foo = 'test'',' test = QByteArray (foo.encode (' utf-8 ')) ',' print (type (test)) -> ', называя его 'result = self.fpiudaemon.call ('sign', [test], options)' дает интерфейс; member = sign массив [ вариант массива байтов «test»] 'и так еще раз не массив строки –
svalo