这就是我需要得到我从node 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);
});
}
我想你使用的是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;
});