Вызовите скрипт Python как дочерний процесс с NodeJS, используя Docker - PullRequest
0 голосов
/ 06 июня 2019

Я новичок в докере и не могу запустить свой скрипт на Python из NodeJs. Кажется, что скрипт Python не отправляет данные обратно в JavaScript. Нужно ли что-нибудь добавлять в dockerfile для запуска python, например, добавлять его как новый контейнер?

Код NodeJ для вызова Python

app.get('/python', (req, res) => {
    console.log('Welcome to python')
    const childProcess=require("child_process");
    const spawn = childProcess.spawn;
    const pythonProcess = spawn('python -u',['preProcessing.py', 12, 17]);

    console.log('Spawned to python')

    pythonProcess.stdout.on('data', (data) => {
        console.log(data.toString());
        console.log("Child data: " + data);
    });
    pythonProcess.on('error', function () {
      console.log("Failed to start child.");
    });
    pythonProcess.on('close', function (code) {
      console.log('Child process exited with code ' + code);
    });
    pythonProcess.stdout.on('end', function () {
      console.log('Finished collecting data chunks.');
    });
    console.log('Finally')
});

Простой скрипт на Python

import sys

print(sys.argv[1])
sys.stdout.flush()

Докер-Compose

version: '3'
services:
  app:
    container_name: docker-node-mongo
    restart: always
    build: .
    ports:
      - '80:3000'
    links:
      - mongo
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - '27017:27017'
    volumes:
    - data-volume:/data/db

volumes:
  data-volume:

Терминальный выход

docker-node-mongo | MongoDB Connected
docker-node-mongo | GET / 304 12.989 ms - -
docker-node-mongo | Welcome to python
docker-node-mongo | Spawned to python
docker-node-mongo | Finally
docker-node-mongo | Failed to start child.
docker-node-mongo | Finished collecting data chunks.
docker-node-mongo | Child process exited with code -2
docker-node-mongo | GET /python - - ms - -

Должно быть напечатано «Дочерние данные: 12»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...