首页 > 解决方案 > 通过 Python 节点将字典从 LabVIEW 传递到 Python 脚本

问题描述

TLDR:我正在围绕某些东西制作一个python 包装器,供LabVIEW 使用,我想将一个dict(甚至kwargs)[即键/值对]传递给python 脚本,这样我就可以拥有更多动态函数参数。

LabVIEW 2018 实现了一个Python 节点,允许 LabVIEW 通过调用、传递和获取返回的变量与 Python 脚本进行交互。

问题是它似乎没有对该dict类型的本机支持:

Python 节点详细信息支持的数据类型

Python 节点支持大量数据类型。您可以使用该节点调用以下数据类型:

数值数组,包括多维数组字符串簇调用约定

该节点将整数和字符串转换为 Python 中对应的数据类型,将数组转换为列表,并将簇转换为元组。

当然,python 是围绕字典构建的,但 LabVIEW 似乎不支持任何传递字典对象的方式。

有谁知道我可以将一组命名元素(或任何其他字典类型)作为dict对象传递给 python 脚本的方法?

标签: pythonpython-3.xlabview

解决方案


没有直接的方法可以做到这一点。

双方最简单的方法是使用 JSON 字符串。

从 LabVIEW 到 Python

LabVIEW集群可以展平为JSON(字符串>展平/未展平):

在此处输入图像描述

结果字符串可以在一行(加上一个import)python中转换为dict:

>>> import json
>>> myDict=json.loads('{"MyString":"FooBar","MySubCluster":{"MyInt":42,"MyFloat":3.1410000000000000142},"myIntArray":[1,2,3]}')
>>> myDict
{u'MyString': u'FooBar', u'MySubCluster': {u'MyInt': 42, u'MyFloat': 3.141}, u'myIntArray': [1, 2, 3]}
>>> myDict['MySubCluster']['MyFloat']
3.141

从 Python 到 LabVIEW

Python 方面又简单了:

>>> MyJson = json.dumps(myDict)

在 LabVIEW 中,从字符串中展开 JSON,并使用默认值连接预期结构的簇:

在此处输入图像描述

这当然要求dict的结构是固定的。如果不是,您仍然可以通过将它们的路径作为数组来访问单个元素:

在此处输入图像描述

限制:

虽然这很有魅力(您是否注意到我的语言环境使用逗号作为十进制符号?),但并非所有数据类型都受支持。例如,JSON 本身没有时间数据类型,也没有专用路径数据类型,因此 JSON VI 拒绝处理它们。使用数值或字符串数​​据类型,并在 LabVIEW 中进行转换。

Excourse:LabVIEW中的字典式数据类型

如果您需要 LabVIEW 中的动态数据类型,请查看变量的属性。这些是成对的键(字符串)和值(任何数据类型!),可以像在 Python 中一样简单地添加和读取。但是没有(内置的,简单的)方法可以使用它与 Python 交换数据。

在此处输入图像描述


推荐阅读