我在node.js中捕获子进程的事件时遇到问题。这个过程运行正常,并在完成后退出,所以一切都很好。 Stdout也正确管道,所以我可以看到输出正常。不幸的是,我的事件处理程序都没有触发,这使得我很难在进程完成时运行我的回调。我的代码如下:
var child = child_process.spawn('node',
['processor', reportId.toString()],
{ cwd:cwd, stdio:'pipe', env:env });
child.on('data', function(data) {
console.log('Received data...');
console.log(data.toString('utf8'));
});
child.on('message', function(message) {
console.log('Received message...');
console.log(message);
});
child.on('close', function(code) {
console.log('Child process closed');
});
child.on('disconnect', function(code) {
console.log('Child process disconnected');
callback();
});
child.on('exit', function(code) {
console.log('Child exited with code ' + code);
callback();
});
child.stderr.pipe(process.stderr, { end:true });
child.stdout.pipe(process.stdout, { end:true });
我确定我做错了什么,但是没有任何文件似乎提供了问题可能是什么的线索。有什么想法吗?
我在Windows上运行节点0.10.8。
答案 0 :(得分:5)
Spawn没有fork内置的相同ipc频道,因此消息事件不会触发,除非您启用它:
var child = child_process.spawn('node', ['processor', reportId.toString()],{
cwd:cwd,
env:env,
stdio:['ipc'] //enable ipc channel
});
数据事件应该在子项的stdout而不是子项本身:
child.stdout.on('data', function(data) {
console.log('Received data...');
console.log(data.toString('utf8'));
});