Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中打包一个GLib.Variant_Python_Glib - Fatal编程技术网

在Python中打包一个GLib.Variant

在Python中打包一个GLib.Variant,python,glib,Python,Glib,PyGObject API允许使用unpack()方法将GLib变量转换为Python对象(请参阅) 然而,有没有一种直接的方法可以实现相反的效果 例如,我可以使用Variant构造函数创建任意GLib Variant对象: >>> myglibvariant = GLib.Variant("a{sv}", { 'test': GLib.Variant('s', 'value')}) 并使用unpack()函数一步创建Python对象: >>&

PyGObject API允许使用
unpack()
方法将GLib变量转换为Python对象(请参阅)

然而,有没有一种直接的方法可以实现相反的效果

例如,我可以使用Variant构造函数创建任意GLib Variant对象:

>>> myglibvariant = GLib.Variant("a{sv}", { 'test': GLib.Variant('s', 'value')})
并使用
unpack()
函数一步创建Python对象:

>>> myglibvariant.unpack()
{'test': 'value'}
然而,有没有一种方法可以一步完成相反的操作?例如

>>> myglibvariant = GLib.Variant.pack({'test': 'value'})

否,因为您必须指定类型。(在
{'test':'value'}
示例中,pack函数必须猜测类型是
a{ss}
还是
a{sv}
,或者可能是
{ss}
还是
{sv}
还有。

很好的一点,类型的模糊性使得猜测类型是不可能的。但是,如果给定了类型,它应该是可能的,不是吗?例如,
GLib.Variant.pack(“a{sv},{test':'value'})
当试图使用上述示例(
GLib.Variant(“a”)时,该函数就是
GLib.Variant
构造函数,否?否{sv},{'test':'value'})
)它失败了
TypeError:argument value:Expected GLib.Variant,但是得到了str
。我认为它可能很聪明,只需将
'value'
变成一个变量。似乎
解包()
则相反,它将变量转换为字符串……如果它自动将
'value'
包装为变量,它仍然不知道该变量的类型;它可能是
's'
'o'
,或
'g'