繁体   English   中英

如何在node.js子进程模块中将消息以及stdout从子节点传递给父节点?

[英]How to pass messages as well as stdout from child to parent in node.js child process module?

我遇到了子进程模块的问题,特别是child.spawn和child.fork。 我依赖于child_process.fork的文档,其中说:

这是用于生成Node.js进程的child_process.spawn()功能的特例。 除了在普通的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或spawn。 有什么建议?

当您将选项对象传递给fork()时,需要在options对象上设置silent属性,以便将stdin,stdout和stderr传递回父进程。

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

spawn('stdbuf', ['-i0', '-o0', '-e0', "./test-script" ]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM