Изображение крышки было получено из здесь
Вы когда-нибудь задавались вопросом, можете ли вы запустить функцию Python внутри кода Nodejs? Я тоже задумался, и я исследую и увидел модуль в Nodejs Child_Process что позволяет вам запускать дочерние процессы. Вы можете задаться вопросом, какие дочерние процессы, ну, в соответствии с Википедией,
Детский процесс в вычислениях – это процесс, созданный другим процессом. Эта техника относится к многозадачении операционных систем и иногда называют подпроцессором или традиционно подзабой. Существует две основные процедуры для создания дочернего процесса: вызов вилкой системы и нереста.
Я попытаюсь прогуляться по вам, как запустить неблокирующий скрипт Python внутри вашего кода Nodejs.
Обязательные к приобретению
Очевидно, у вас должны быть установлены Nodejs на вашем компьютере. После чего вы должны импортировать модуль FS. Также, поскольку я хочу отобразить результаты в браузере, давайте использовать Express, чтобы служить ему.
Установка NPM выражать
Настраивать
Создайте два файла, index.js и main.py Добавьте код ниже в свой файл index.js
const { spawn } = require('child_process'); const express = require("express"); const app = express();
В файле main.py добавьте код ниже
print('Hello')
Основная реализация
В файле index.js добавьте следующее
const pythonPromise = () => { return new Promise((resolve, reject) => { const python = spawn("python", ["./main.py"]); python.stdout.on("data", (data) => { resolve(data.toString()); }); python.stderr.on("data", (data) => { reject(data.toString()); }); }); }; app.get("/:name", async (req, res) => { const dataFromPython = await pythonPromise(); res.send(dataFromPython + req.params.name); }); app.listen(3200, () => console.log("App is running port 3200"));
Функция Spawn здесь занимает два аргумента, первый «Питон»
Какая программа, которую мы хотим запустить, а "./main"
Какой путь к файлу Python мы хотим запустить. Мы все знаем, что nodejs – это управляется событиями, два события, которые мы слушаем, находятся python.stdout.on
и python.stderr.on.
. Стдерр недолго для стандартной ошибки, которая возникает при попытке запустить сценарий Python во время stdout Коротко для стандартного вывода, которое является возвращающим значением из нашего скрипта. Тип возвращенных данных – это двоичный, поэтому вам нужно позвонить в TOSTRING ()
Метод преобразовать его в строку.
Начните свой сервер с Узел index.js
и посетить http://localhost: 3200/YourName
в вашем браузере или почтальон, чтобы увидеть результат. Там действительно не нужно будет использовать сценарии Python, если мы не передаем аргументы в сценарий Python, давайте редактировать наши main.py Чтобы иметь функцию, которая принимает аргументы из вашего кода NODEJS. Заменить:
import sys print('Hello ' + sys.argv[1] + ' your id is ' + sys.argv[2])
Кроме того, мы добавляем больше аргументов в функцию порождения, и наш файл index.js должен выглядеть следующим образом:
const pythonPromise = (data) => { return new Promise((resolve, reject) => { const python = spawn("python", ["./main.py", ...data]); python.stdout.on("data", (data) => { resolve(data.toString()); }); python.stderr.on("data", (data) => { reject(data.toString()); }); }); }; app.get("/:name/:id", async (req, res) => { const { name, id } = req.params; const dataFromPython = await pythonPromise([name, id]); res.send(dataFromPython); }); app.listen(3200, () => console.log("App is running port 3200"));
Вам может быть интересно, что в системе SYS модуль мы импортировали в сценарий Main.py. По словам GeeksForGeeks С
Модуль SYS предоставляет функции и переменные, используемые для манипулирования различными частями среды выполнения Python. Этот модуль обеспечивает доступ к некоторым переменным, используемым или поддерживаемым переводчиком и функциями, которые сильно взаимодействуют с интерпретатором.
И индексы ARGV [1] и ARGV [2] являются параметрами, которые мы хотим перейти к сценарию. Первый аргумент Argr [0] – это имя файла, с которого мы выполняем скрипт. Начните свой сервер с Узел index.js
и посетить http://localhost: 3200/yourname/Anyid
в вашем браузере или почтальон, чтобы увидеть результат.
Это очень базовый пример, чтобы разоблачить вас к полномочиям метода порождения модуля Child_PoCess. Могут быть сложные случаи, такие как проходные объекты JSON к вашему сценарию Python или получают данные JSON из скрипта, но это должно запускаться на пути к запуску сценариев Python в ваших приложениях Nodejs. ✌🏻.
Оригинал: “https://dev.to/addempsea/snake-in-the-js-shadow-run-your-python-script-in-nodejs-im8”