Я хочу получать все возвраты в режиме реального времени из скрипта, который отправляет несколько строк информации подряд

#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 она работает отлично, если у вас есть какая-то идея