如何在PyQt5中将字符串数组传递给dbus? [重复]

问题描述 投票:2回答:2
[我正在尝试使用python3.4和pyqt5.4对Java编写的守护程序进行dbus调用,我正在调用的方法的守护程序的签名为asa{sv}

我正在打的电话是

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时,我得到的是

方法呼叫发送者=:1.242-> dest = it.libersoft.FirmapiuDInterface serial = 67 path = / it / libersoft / FirmapiuD; interface = it.libersoft.FirmapiuDInterface;成员=登录数组[变体字符串“ / home / svalo / programmi / devel / firmapiu-gui / pythondeps”]数组[字典条目(字符串“ outdir”变体字符串“ / home / svalo / programmi / devel / firmapiu-gui”)字典条目(字符串“ pin”变体字符串“ 12345678”)]

我想得到的是

方法呼叫发送者=:1.242-> dest = it.libersoft.FirmapiuDInterface serial = 67 path = / it / libersoft / FirmapiuD; interface = it.libersoft.FirmapiuDInterface;成员=登录数组[字符串“ / home / svalo / programmi / devel / libersoft / firmapiu-gui / pythondeps”]数组[字典条目(字符串“ outdir”变体字符串“ / home / svalo / programmi / devel / libersoft / firmapiu-gui”)字典条目(字符串“ pin”变体字符串“ 12345678”)]

那是我希望python发送一个字符串数组,而是发送一个包含字符串的变量数组。

守护程序开发用Java语言编写了一个简单的客户端,它可以尊重签名

我在这里想念什么?

python-3.x dbus pyqt5 qt5.4
2个回答
0
投票
根据dbus-spec,字符串类型定义如下:

STRING 115(ASCII's')UTF-8字符串(必须为有效的UTF-8)。必须以nul终止并且不包含其他nul字节。

似乎暗示您应该传递UTF-8编码的

bytes对象,而不是unicode对象。

编辑:

您可能需要将此作为QByteArray传递:

QtCore.QByteArray(unicode_string.encode('utf-8'))


0
投票
5年后,出现答案!

您可以使用QDbusArgument指定dbus参数的类型签名。这是一个例子:

filepath = QDBusArgument() filepath.add(['/home/svalo/programmi/devel/pythondeps'], QMetaType.QStringList) result = fpiudaemon.call('sign',filepath,options)

显然,请确保您的数据可以直接转换为您指定的类型。 
© www.soinside.com 2019 - 2024. All rights reserved.