Могу ли я использовать child_process для создания нескольких выходов Python на сервере? - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь использовать NodeJS для выполнения нескольких скриптов Python и отправки содержимого этих скриптов на локальный хост. Я хотел бы не быть конкретным для точного скрипта Python, но использовать что-то похожее на выполнение скрипта Python, который использует ".py".

Я пытался запустить несколько процессов, но последний перезаписал первый на локальном хосте.

Python-скрипты:

hellothere.py

 print("hello there")

helloworld.py

 print("Hello World!")

Goodbye.py

 print("Goodbye!")

Pythonspawn.js

var express = require('express');

var app = express();

app.get('/name', function callName(req, res) {

    var spawn = require("child_process").spawn;

            var PythonProcess1 = spawn('python',["./hellothere.py"] );
            var PythonProcess2 = spawn('python', ['./helloworld.py']);
            var PythonProcess3 = spawn('python', ['./Goodbye.py']);
            PythonProcess1.stdout.on('data', function(data) {
            res.send(data.toString());
            })
            PythonProcess2.stdout.on('data', function(data) {
            res.send(data.toString());            
            })
            PythonProcess3.stdout.on('data', function(data) {
            res.send(data.toString());            
            })
        }
})   
app.listen(1820, function() {
    console.log('Server is running on port %d.', this.address().port);
})

Я бы хотел выполнить любой скрипт на python, который использует «.py», а не указывать точный скрипт, который я хочу выполнить. Если возможно, я хотел бы также выполнить сценарии, если они имеют различное количество аргументов. (То есть, если у helloworld.py было два sys.arg [i], а у Goodbye.py один sys.arg [i].)

1 Ответ

0 голосов
/ 10 июня 2019

Вы можете использовать exec () здесь, здесь я проверяю все файлы .js в текущем рабочем каталоге, выполняя их все, добавляя результат в массив и, наконец, возвращая его.

const { exec } = require('child_process');

var result = [];
exec('ls | grep .js', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  var s = stdout.split('\n');
  s.pop();
  console.log(s);
  executeFiles(s);
});

function executeFiles(filenames) {
  filenames.forEach((element, index) => {
    exec(`node ${element}`, (error, stdout, stderr) => {
      if (error) {
        console.error(`exec error: ${error}`);
        return;
      }
      console.log(stdout);
      result.push(stdout.toString());
      if (index === filenames.length - 1) {
        console.log(result);
        return result;
      }
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...