Рубрики
Без рубрики

Змея В тени JS: запустите свой скрипт Python в Nodejs

Изображение крышки было получено от здесь когда-либо задуматься, если вы можете запустить функцию Python внутри … Помечено JavaScript, Python, WebDev, Node.

Изображение крышки было получено из здесь

Вы когда-нибудь задавались вопросом, можете ли вы запустить функцию 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”