如何在node.jssubprocess模块中将消息以及从child到stdout传递给父进程?

我有一个child-process模块​​的问题,特别是与child.spawn和child.fork。 我依靠child_process.fork的文档,它说:

这是产生Node.js进程的child_process.spawn()function的特例。 除了正常的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'…语句中的subprocess中捕获stdout。如果我取消注释它,我得到一个错误:

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

我不介意使用任何subprocessasynchronous变体,exec,fork或spawn。 有什么build议么?

将选项对象传递给fork()时,需要将silent属性设置为stdin,stdout和stderr以便重新连接到父进程。

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