Я пытаюсь получить выходные данные bash-скрипта в приложение ExpressJS, где я могу затем отправить данные клиенту.
Я создал скрипт ниже, который имитирует вывод фактического скрипта, который я буду использовать для моего проекта. Я хочу иметь возможность собирать эти данные в том виде, в котором они были записаны в терминал, сохранять их в переменной в моем экспресс-приложении, откуда я затем могу отправлять данные через SSE или через веб-сокет.
n=`expr 10 \* $1`
executionprocessing="processing"
jobdone="done"
sleep 5
echo $executionprocessing
sleep 5
echo $jobdone
echo $n
Что у меня так далеко:
app.post('/compute', function(req, res) {
shell.exec('sh ./Scripts/mytestscript.sh 10', function(code, stdout, stderr) {
console.log('code:' + code)
console.log('stdout:' + stdout)
})
})
Когда есть пост-запрос, shellJS выполняет сценарий в локальном каталоге и вывод выводится на консоль. Проблема в том, что данные записываются одновременно, когда скрипт завершает выполнение, а не записывает данные по мере их поступления. Я хочу иметь возможность взаимодействовать с этими данными в режиме реального времени. Это вообще возможно?
EDIT:
дочерний процесс - это путь. Вот мое решение для всех, кто имеет эту проблему.
const child = spawn('sh',['mytestscript.sh','10'],{cwd:'./Scripts'})
child.stdout.on('data', (data) => {
console.log('code:' + data.toString())
});