如何在node.js子流程模块中将消息和stdout从子进程传递到父进程? [英] How to pass messages as well as stdout from child to parent in node.js child process module?

查看:25
本文介绍了如何在node.js子流程模块中将消息和stdout从子进程传递到父进程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在子进程模块方面遇到了问题,特别是在Child.spawn和Child.fork方面。 我依赖的是Child_process.fork的文档,它说:

这是的Child_process.spawn()功能的特例 派生Node.js进程。除了将所有方法都放在 正常的ChildProcess实例,则返回的对象具有通信 频道内置。详情请参见Child.send(message,[sendHandle])。

我已将我的问题简化如下:

parent.js为:

var cp = require('child_process');
var n = cp.fork('./child.js');
n.send({a:1});
//n.stdout.on('data',function (data) {console.log(data);});
n.on('message', function(m) {
  console.log("Received object in parent:");
  console.log( m);
});

Child.js为:

process.on('message', function(myObj) {
  console.log('myObj received in child:');
  console.log(myObj);
  myObj.a="Changed value";
  process.send(myObj);
});
process.stdout.write("Msg from child");

不出所料。输出为:

Msg from child
myObj received in child:
{ a: 1 }
Received object in parent:
{ a: 'Changed value' }

我希望它与parent.js中未注释的注释行一起工作。换句话说,我希望在n.stdout.on(‘data’.)文件的子进程中捕获stdout。语句添加到父进程中。如果我取消对其的注释,则会收到错误:

n.stdout.on('data',function (data) {console.log(data);});
    ^
TypeError: Cannot read property 'on' of null

我不介意使用任何子进程异步变体,exec、fork或spwn。有什么建议吗?

推荐答案

您需要在将Options对象传递给Fork()时设置该对象的Silent属性,以便将标准输入、标准输出和标准错误通过管道传回父进程。

例如var n = cp.fork('./child.js', [], { silent: true });

这篇关于如何在node.js子流程模块中将消息和stdout从子进程传递到父进程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆