Ese es el problema que necesito para obtener todos los resultados de un script que ejecuto desde el nodo js y obtenerlos todos, ahora los obtengo pero solo cuando el proceso del script está completamente terminado y quiero obtenerlos cada vez que los envía . Este es el código:
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); }); }Supongo que estás usando child_process.exec . Para su caso de uso, child_process.spawn sería la elección correcta, creo, ya que está emitiendo eventos que puede escuchar.
Consulte el documento de nodejs https://nodejs.org/api/child_process.html#child_processspawncommand-args-options
Algo como esto debería implementar aproximadamente el comportamiento que está buscando.
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; });