Передать словарь из LabVIEW в скрипт Python через узел Python - PullRequest
2 голосов
/ 23 мая 2019

TLDR: я создаю оболочку Python для чего-то, что LabVIEW будет использовать, и я хочу передать dict (или даже kwargs) [то есть пары ключ / значение] в скрипт Python, чтобы у меня было больше динамических аргументов функции.

В LabVIEW 2018 реализован Python Node , который позволяет LabVIEW взаимодействовать со сценариями Python путем вызова, передачи и получения возвращаемых переменных.

Проблема в том, что это не таккак представляется, имеет встроенную поддержку типа dict:

Подробности узла Python Поддерживаемые типы данных

Узел Python поддерживает большое количество типов данных.Вы можете использовать этот узел для вызова следующих типов данных:

Числовые массивы, включая многомерные массивы Соглашения о вызовах строк

Этот узел преобразует целые числа и строки в соответствующие типы данных в Python,преобразует массивы в списки и преобразует кластеры в кортежи.

Конечно, Python построен на основе словарей, но, похоже, LabVIEW не поддерживает способ передачи объекта словаря.

Кто-нибудьзнаете, как я могу передать кластер именованных элементов (или любой другой тип словаря) скрипту Python как dict объект?

1 Ответ

3 голосов
/ 24 мая 2019

Прямого способа сделать это нет.

Самый простой способ с обеих сторон - использовать строки JSON.

От LabVIEW до Python

Кластеры LabVIEW могутбыть сведено в JSON (Строки> Свести / отменить):

enter image description here

Полученную строку можно преобразовать в dict только в одну строку (плюс import) python:

>>> 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 из строки и проводкластер ожидаемой структуры со значениями по умолчанию:

enter image description here

Это, конечно, требует, чтобы структура dict была фиксированной.Если это не так, вы все равно можете получить доступ к отдельным элементам, указав путь к ним в виде массива:

enter image description here

Ограничения:

Покаэто работает как талисман (вы даже заметили, что моя локаль использует запятую в качестве десятичного знака?), поддерживаются не все типы данных.Например, сам JSON не имеет ни типа данных времени, ни типа выделенного пути, и поэтому VI JSON отказываются обрабатывать их.Используйте числовой или строковый тип данных и преобразуйте его в LabVIEW.

Экскурс: тип данных dict-ish в LabVIEW

Если вам когда-нибудь понадобится динамический тип данных в LabVIEW, взгляните на атрибутыварианты.Это пары ключей (строка) и значений (любой тип данных!), Которые можно добавлять и считывать так же просто, как в Python.Но нет никакого (встроенного, простого) способа использовать это для обмена данными с Python.

enter image description here

...