Я пишу простое веб-приложение, чтобы понять, как работают дочерние процессы узла. По сути, вы вводите свое имя в угловой интерфейс, который передает имя экспресс-серверу в объекте javascript. Бэкэнд передает имя в качестве аргумента простому скрипту Python в качестве аргумента командной строки с использованием модуля child_process. Нет ничего плохого во внешнем интерфейсе, и имя успешно передается бэкэнду, но когда я вызываю stdout в процессе python, оно не работает. Там нет никаких сообщений об ошибках.
Вот экспресс-код:
app.post('/api', (req, res, next) => {
console.log(req.body.name);
const spawn = require('child_process').spawn;
const process = spawn('python3', ['./hello.py', req.body.name]);
process.stdout.on('data', (data) => {
console.log(data);
res.status(200).json({greeting: data});
});
});
Я поместил два оператора console.log в код для его отладки. Первый выводит данные, но второй внутри функции stdout не вызывается вообще. Сценарий python находится в той же папке, что и экспресс-файл app.js, поэтому я почти уверен, что в пути к файлу нет ничего плохого.
Вот сценарий python:
import sys
print('hello' + sys.argv[1])
sys.stdout.flush()
КогдаЯ запускаю его в командной строке, он работает точно так, как ожидалось, но я все равно включил его на всякий случай.