我正在尝试这个:
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'} );
我读到了这个:http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options 但我不知道我哪里错了。这是我第一次尝试使用这个NodeJS功能,所以如果问题很明显,我很抱歉。
也许有其他方法可以解决问题。孩子必须被产生而不是分叉,我只是希望能够将孩子的信息发送给父母。
谢谢!
编辑:我有Node v0.8.18。我搜索了IPC http://nodejs.org/changelog.html的版本历史记录,搜索词“IPC”没有任何内容让我觉得我需要更新版本的NodeJS。
答案 0 :(得分:6)
这是一个完整的例子,与其他答案略有不同:
<强> parent.js 强>
spawn('node', ['child.js'], {
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
}).on('message', function(data) {
console.log(data);
});
cwd
。inherit
用于与孩子共享相同的流(如stdout
),因此您可以在控制台中查看相关内容。<强> child.js 强>
process.send && process.send('hello parent');
undefined
),因此您需要先检查。答案 1 :(得分:3)
Rockamic根据我的一些推动回答了他自己的问题。这是什么工作&amp;原因如下:
var child = spawn('node', args, {cwd: parentDir, stdio: [null, null, null, 'ipc']} );
指定stdin,stdout,stderr,因为 null 表示默认...
如果rockamic回来并提供了自己的答案,我很乐意将其删除,以便他能得到接受的答案。
答案 2 :(得分:0)
尝试:
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: 'ipc'} );
(在您的arg中添加括号,应该是一个数组)并查看是否会改变您的错误 -
如果不是
var child = spawn('node', ['childnodejsscript.js'], {cwd: parentDir, stdio: ['pipe', 1, 2, 'ipc']} );
你可能想要改变'pipe',或者也可以解决stdout ...不确定你真正想要的是什么。
最后,这似乎是一个很好的帖子,可以帮助你获得一些观点。标题似乎不合适,但如果您阅读代码中发生的事情,我认为它会有所帮助:
http://blog.trevnorris.com/2013/07/child-process-multiple-file-descriptors.html
不要忘记发布结果&amp;帮助其他人,特别是有效的或改变了什么...... thx