Javascript Node.js截取另一进程的输出

Javascript Node.js截取另一进程的输出,javascript,node.js,child-process,Javascript,Node.js,Child Process,我正在尝试从正在运行的Node.js进程启动几个进程。 问题是,这些必须从脚本启动,并使用exec,如下所示: exec("./scripts/run.sh",(err, stdout, stderr) => { if (err) { console.error(err); return; } this.logs = this.logs.unshift(timestamp() + stdout); this.errorlogs = this.logs.unshift(ti

我正在尝试从正在运行的Node.js进程启动几个进程。 问题是,这些必须从脚本启动,并使用exec,如下所示:

exec("./scripts/run.sh",(err, stdout, stderr)  => {
if (err) {
  console.error(err);
  return;
}
  this.logs = this.logs.unshift(timestamp() + stdout);
  this.errorlogs = this.logs.unshift(timestamp() + stderr);
});
不重定向我需要的输出。 Fork似乎只适用于Node.js进程,而这些进程不是

这些进程工作得很好,并作为主进程的子进程发挥作用。我只需要得到stdout和stderr的输出。 有什么建议吗?

child\u process.exec()
仅在执行的进程终止后运行回调函数一次。如果希望在进程仍在运行时从进程的stdout和stderr获取增量数据,请使用
子进程.spawn()
并设置
选项.stdio
属性,使进程的stdout和stderr可供父进程使用

child\u process.spawn()
返回一个
ChildProcess
对象。要收集进程的输出,可以为该对象的
stdout
stderr
流建立数据处理程序。您还应该为在流程启动失败时触发的
错误
事件和在这些流关闭且流程终止时触发的
关闭
事件建立处理程序

它看起来像这样:

  child = spawn("./scripts/run.sh", 
                [],
                {stdio: ['ignore', 'pipe', 'pipe']});

  child.on('error', (err) => }
      console.log('child launch failed: ', err);
  });

  child.on('close', (code) => {
      console.log('child ended: ', code);
  });

  child.stdout.on('data', (outdata) => {
      this.logs = this.logs.unshift(timestamp() + outdata);
  });

  child.stderr.on('data', (errdata) => {
      this.errorlogs = this.logs.unshift(timestamp() + errdata);
  });

血淋淋的详细信息在Node.js文档中,

Try
stderr.on('data',console.log)
stdout.on('data',console.log)
?似乎没有输出任何内容。谢谢你!这正是我需要的,谢谢!有趣的是,此方法将this.log转换为非数组。但它是一个指针,所以它不需要this.logs=this.logs。。。无论如何