Python

Описание

Узел создает новый набор данных с заданным составом и параметрами полей и заполняет его данными в ходе выполнения кода Python. Для заполнения выходного набора в коде возможно использование данных входных портов.

Состав и параметры полей выходного набора могут задаваться как в мастере настройки узла, так и из кода Python.

Примечание: Для работы узлов Python может потребоваться предварительная настройка Loginom и установка Python. Подробности в разделе Особенности использования и ограничения.

Вход

  • Входной источник данных (таблица данных), необязательный;
  • Добавить еще один порт – создает новый порт Входной источник данных[N], где N – порядковый номер порта;
  • Входные переменные (переменные), необязательный.

Выход

  • Выходной набор данных (таблица данных).

Мастер настройки

Последовательно выполняются следующие этапы настройки:

  • Настройка столбцов выходной таблицы Python;
  • Python – ввод кода и предварительный просмотр результатов.

Настройка столбцов выходной таблицы

Столбцы выходного набора можно задать как на странице Настройка столбцов выходной таблицы Python мастера, так и динамически, в ходе исполнения кода Python. При установке флага Разрешить формировать выходные столбцы из кода доступно динамическое создание, изменение и удаление выходных столбцов.

Python

Страница Python содержит редактор исполняемого узлом кода. По кнопке Предпросмотр… в отдельном окне выводятся до 100 первых строк результирующего набора данных и панель вывода сообщений.

Примечание: При нажатии на кнопку Предпросмотра активируются все входные порты. При успешном завершении активации открывается окно Предпросмотра.

Поскольку одновременно может выполняться только один узел Python, то последующий в очереди запуска узел Python ожидает выполнения предыдущего. Максимальное время ожидания задается параметром Тайм-аут ожидания запуска (мс). По умолчанию тайм-аут неограничен. Если время тайм-аута превышено, выполнение узла завершается с соответствующей ошибкой.

Поддерживается импорт модулей Python (см. Особенности использования и ограничения).

См. также: Горячие клавиши редактора кода

Доступ из кода Python к данным портов и другим встроенным объектам

Для доступа к данным портов и другим встроенным объектам в контексте выполнения кода предусмотрены следующие объекты:

Вышеуказанные объекты импортируются из встроенного модуля "builtin_data". По умолчанию в текст исполняемого узлом кода добавляется строка импорта этих объектов.

Обработка ошибок

При вызове окна Предпросмотра или выполнении узла выводится сообщение об обнаруженных синтаксических ошибках и ошибках хода выполнения с указанием позиции кода, содержащего ошибку.

Особенности использования и ограничения

  • Для работы узлов Python необходимо выполнение следующих условий:
    • в системе должен быть установлен Python одной разрядности с сервером Loginom.
    • при необходимости разрешить выполнение узлов Python. По умолчанию в серверных редакциях Loginom это запрещено в разделе Администрирование->Параметры->Параметры компонента Python. В настольных редакциях выполнение узлов Python по умолчанию разрешено.
    • при необходимости в параметре Путь библиотеки раздела Администрирование->Параметры->Параметры компонента Python указать путь к библиотеке python3x.dll, где x – номер минорной версии. Если в параметре путь не задан, то осуществляется его автоматический поиск в переменной окружения PYTHONHOME и реестре. Если в этих расположениях отсутствует путь к библиотеке или необходимо использовать конкретную версию Python из нескольких установленных в системе, то следует указать путь к библиотеке в параметрах компонента Python.
  • Минимальная поддерживаемая версия Python - 3.4.
  • Максимальная протестированная версия Python - 3.9.
  • Python из дистрибутива Anaconda не поддерживается.
  • Не поддерживаются модули пакета multiprocessing.
  • Создание GUI-интерфейса из кода Python не является целевым назначением и в некоторых случаях может приводить к неверной работе приложения. Например:
    • работа узла не будет прекращена до завершения работы GUI-приложения. При работе в серверных версиях Loginom пользователь, как правило, не имеет доступа к окну GUI-приложения.
    • для работы matplotlib с бэкэндом Qt и в целом с PyQt требуется наличие файла qt.conf с путями к библиотекам/плагинам Qt. При невозможности их найти, приложение Loginom будет принудительно завершено с сообщением об ошибке.
  • Оставленные незавершенными фоновые потоки могут приводить к аварийному завершению приложения.
  • В случае критических ошибок python3*.dll может аварийно завершить приложение. Рекомендуется использовать предварительно отлаженный код Python.
  • Одновременно может выполняться только один узел Python.
  • Остановить выполнение узла Python можно только между инструкциями интерпретатора.
  • Виртуальные окружения не поддерживаются.

Код узла выполняется в модуле __main__. Таким образом выполняется условие __name__ == '__main__', которое обычно используется для запуска скриптов.

Поддерживается импорт модулей из файлового хранилища. В коде узла:

  • Если пакет сохранен, то относительный путь к импортируемому модулю указывается от расположения пакета. sys.path (sys.path[0]) содержит путь к директории пакета, в котором находится узел Python.
  • Если пакет не сохранен, то относительный путь к импортируемому модулю указывается от каталога пользователя. sys.path (sys.path[0]) содержит путь к каталогу пользователя.

В модулях относительный путь указывается от расположения модуля, осуществляющего импорт.

Пример:

Относительно сохраненного пакета Loginom расположены следующие модули:

  • модуль ./foo/__init__.py:
__all__ = ["module"]
from .foo import cube
  • модуль ./foo/foo.py:
def cube(x):
    return x * x * x
  • модуль ./foo/module/__init__.py:
from .module import say_hello
  • модуль ./foo/module/module.py:
def say_hello():
    return "Hello"

При таком расположении модулей импорт и вызов функций этих модулей может осуществляться в узле Python следующим образом:

from foo import cube
from foo.module import say_hello

print(say_hello())
print("3 ** 3 =", cube(3))

В режиме Предпросмотра результатов значение атрибута __file__ модуля __main__ равно <preview>, при выполнении узла – <main>.

Пример:
from builtin_data import OutputTable

if __file__ == "<preview>":
    print(__file__)
else:
    OutputTable.Append()
    OutputTable.Set(0, __file__) #__file__ == "<main>"

Доступна глобальная функция filestoragepath, которая принимает путь в файловом хранилище и преобразует его в абсолютный путь в файловой системе. Дополнительных импортов для ее применения выполнять не нужно.

Пример:
from builtin_data import OutputTable
import json

with open(filestoragepath("data_file.json")) as f:
    data = json.load(f)
OutputTable.Append()
OutputTable.Set(0, data)


Статьи в разделе:

results matching ""

    No results matching ""