首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js截取另一个进程的输出

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

Stack Overflow用户
提问于 2018-06-01 21:58:00
回答 1查看 812关注 0票数 0

我正在尝试从一个正在运行的Node.js进程中启动一些进程。问题是,它们必须从脚本启动,并像这样使用exec:

代码语言:javascript
复制
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输出。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 08:41:22

child_process.exec()仅在执行进程终止后运行回调函数一次。如果希望在进程仍在运行时从进程的标准输出和标准错误中获得增量数据,请使用child_process.spawn()并设置options.stdio属性,使进程的标准输出和标准错误可供父进程使用。

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

它看起来像这样:

代码语言:javascript
复制
  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);
  });

血淋淋的细节在https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_child_process_spawn_command_args_optionshttps://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_class_childprocess的Node.js文档中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50645084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档