У меня есть приложение Express Node.js, но у меня также есть алгоритм машинного обучения для использования в Python. Есть ли способ вызвать функции Python из моего приложения Node.js, чтобы использовать возможности библиотек машинного обучения?
209
node-python
похоже, заброшенный проект.Ответы:
Самый простой способ, который я знаю, это использовать пакет child_process, который поставляется вместе с узлом.
Тогда вы можете сделать что-то вроде:
Затем все, что вам нужно сделать, это убедиться, что вы
import sys
в своем скрипте Python, и тогда вы можете получить доступarg1
с помощьюsys.argv[1]
,arg2
с помощьюsys.argv[2]
, и так далее.Чтобы отправить данные обратно на узел, просто сделайте следующее в скрипте python:
И тогда узел может прослушивать данные, используя:
Поскольку это позволяет нескольким аргументам передаваться в скрипт с помощью spawn, вы можете реструктурировать скрипт на python так, чтобы один из аргументов решал, какую функцию вызывать, а другой аргумент был передан этой функции и т. Д.
Надеюсь, это было ясно. Дайте мне знать, если что-то нужно уточнить.
источник
exec
которой я столкнулся, заключается в том, что он возвращает буфер вместо потока, и если ваши данные превышаютmaxBuffer
настройку, которая по умолчанию составляет 200 КБ, вы получаете исключение превышения буфера, и ваш процесс завершается. Так какspawn
использует потоки, он более гибкий, чемexec
.Пример для людей, которые имеют опыт работы с Python и хотят интегрировать свою модель машинного обучения в приложение Node.js:
Он использует
child_process
основной модуль:Это не требует
sys
модуля в вашем скрипте Python.Ниже приведен более модульный способ выполнения задачи с использованием
Promise
:источник
python-shell
Модуль с помощьюextrabacon
простой способ запустить Python скрипты из Node.js с основным, но эффективная связь между процессами и лучше обработки ошибок.Установка:
npm install python-shell
.Запуск простого скрипта Python:
Запуск скрипта Python с аргументами и параметрами:
Для полной документации и исходного кода, проверьте https://github.com/extrabacon/python-shell
источник
Теперь вы можете использовать библиотеки RPC, которые поддерживают Python и Javascript, такие как zerorpc
С их главной страницы:
Клиент Node.js
Python Server
источник
Большинство предыдущих ответов называют успешное обещание в on («data»), это неправильный способ сделать это, потому что, если вы получите много данных, вы получите только первую часть. Вместо этого вы должны сделать это в конце мероприятия.
Вызов:
питон:
источник
Я на узле 10 и дочерний процесс
1.0.2
. Данные из python являются байтовым массивом и должны быть преобразованы. Еще один быстрый пример выполнения http-запроса на python.узел
request.py
ps не надуманный пример, так как модуль http узла не загружает несколько запросов, которые мне нужно сделать
источник
Вы можете взять свой питон, перенести его, а затем назвать так, как если бы это был JavaScript. Я сделал это успешно для screeps и даже заставил его работать в браузере по выбору .
источник
Это сработало для меня. Ваш python.exe должен быть добавлен к вам переменные пути для этого фрагмента кода. Также убедитесь, что ваш скрипт на python находится в папке вашего проекта.
источник