#javascript #node.js
Вопрос:
В этом проблема, мне нужно получить все выходные данные скрипта, который я запускаю из узла js, и получить их все, теперь я получаю их, но только когда процесс скрипта полностью завершен, и я хочу получать их каждый раз, когда он их отправляет. Это код:
exec(line, (error, stdout, stderr) => {
if (error) {
out = "!!!!!!! ERROR EN ComandLine (" Today() ")-------!! : n " error.message;
console.log(_out);
WriteLog(_out);
socket.send("ERROR");
return;
}
//Standar error
if (stderr) {
out = "!!!!!!! STDERROR EN ComandLine (" Today() ") : n " stderr.message
console.log(_out);
WriteLog(_out);
socket.send("ERROR");
return;
}
//resultado final
if (stdout.toString().includes("Se fini")) {
console.log("Server end task");
_generating = false;
}
_out = "------- STD OUT ------- (" Today() ") : n " stdout.message;
console.log(_out);
WriteLog(_out);
});
}
Ответ №1:
Я полагаю, что вы используете child_process.exec
. Я думаю, что для вашего варианта использования это child_process.spawn
был бы правильный выбор, поскольку он излучает события, которые вы можете прослушивать.
Смотрите Документ nodejs https://nodejs.org/api/child_process.html#child_processspawncommand-args-options
Что-то вроде этого должно примерно реализовать поведение, которое вы ищете.
const { spawn } = require('child_process');
const cmd = spawn(line);
cmd.stdout.on('data', (data) => {
_out = "------- STD OUT ------- (" Today() ") : n " data;
console.log(_out);
WriteLog(_out);
});
cmd.stderr.on('data', (data) => {
_out = "!!!!!!! STDERROR EN ComandLine (" Today() ") : n " data
console.log(_out);
WriteLog(_out);
socket.send("ERROR");
return;
});
cmd.on('close', (code) => {
console.log("Server end task");
_generating = false;
});
Комментарии:
1. Да, это работает, но не для меня, я запускаю websocket и не могу выполнить эту команду, но без webshocket она работает отлично, если у вас есть какая-то идея