Javascript NodeJS-如何让生成的子节点与父节点通信?
我正在尝试:Javascript NodeJS-如何让生成的子节点与父节点通信?,javascript,node.js,ipc,parent-child,child-process,Javascript,Node.js,Ipc,Parent Child,Child Process,我正在尝试: var child = spawn('node', args, {cwd: parentDir, stdio: 'ipc'} ); (args是一个参数数组) 但它给出了以下错误: TypeError:stdio选项的值不正确:ipc 这实际上是可行的,因此问题似乎确实在于stdio ipc参数: var child = spawn('node', args, {cwd: parentDir} ); 这也适用于: var child = spawn('node', args,
var child = spawn('node', args, {cwd: parentDir, stdio: 'ipc'} );
(args是一个参数数组)
但它给出了以下错误:
TypeError:stdio选项的值不正确:ipc
这实际上是可行的,因此问题似乎确实在于stdio ipc参数:
var child = spawn('node', args, {cwd: parentDir} );
这也适用于:
var child = spawn('node', args, {cwd: parentDir, stdio: 'pipe'} );
我读到:
但我看不出我错在哪里。这是我第一次尝试使用这个NodeJS功能,所以如果问题很明显,我很抱歉
也许还有别的办法解决这个问题。子对象必须是派生的,而不是分叉的,我只是希望能够从子对象向父对象发送消息
谢谢
编辑:我有节点v0.8.18。我搜索了IPC的版本历史记录,没有任何搜索词“IPC”让我认为我需要更新版本的NodeJS。试试:
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: 'ipc'} );
(将括号添加到你的arg中,它应该是一个数组),看看这是否会改变你的错误-
如果不是,也许
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: ['pipe', 1, 2, 'ipc']} );
您可能需要更改“管道”,或者也可以寻址标准输出。。。我不知道你到底想要什么
最后,这似乎是一篇帮助你获得一些观点的好文章。标题似乎不合适,但如果您阅读代码中发生的事情,我认为这会很有帮助:
别忘了公布结果&具体帮助他人做些什么或者你改变了什么。。。基于我的几次轻推,thxRockamic回答了他自己的问题。以下是成功的原因:
var child = spawn('node', args, {cwd: parentDir, stdio: [null, null, null, 'ipc']} );
将stdin、stdout、stderr指定为null表示默认值
如果rockamic回来并提供了自己的答案,我将很乐意删除此内容,以便他能够获得接受的答案。以下是一个完整的示例,与其他答案略有不同: parent.js
spawn('node', ['child.js'], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
}).on('message', function(data) {
console.log(data);
});
process.send && process.send('hello parent');
- 子项与父项共享相同的
cwd
用于与子级共享相同的流(如inherit
),因此您可以在控制台中查看内容stdout
spawn('node', ['child.js'], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
}).on('message', function(data) {
console.log(data);
});
process.send && process.send('hello parent');
- 如果要直接使用相同的代码,该函数将不可用(它将是
),因此需要先检查未定义的