如何在node.js子流程模块中将消息和stdout从子进程传递到父进程? [英] How to pass messages as well as stdout from child to parent in node.js child process module?
本文介绍了如何在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屋!
查看全文