我使用child_process.exec运行npm init,我可以让它创建package.json,但是在创建之后,我的stdin似乎仍然打开,我想知道我的子进程何时完成所以我可能关闭了stdin,但我不知道什么时候结束
这是我的代码:
var child = exec('npm init', function (err, stdout, stderr) {
console.log('over');
});
child.stdout.on('data', function(data) {
process.stdout.write(data);
//process.stdin.resume();
});
child.stdout.on('end', function() {
console.log('end out');
});
child.stdout.on('close', function() {
console.log('close out');
});
child.on('exit', function() {
console.log('exit');
});
child.on('close', function() {
console.log('close');
});
child.on('disconnect', function() {
console.log('disconnect');
});
// read stdin and send to child process
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if(chunk !== null) {
child.stdin.write(chunk);
}
});
完成创建package.json之后没有事件被触发,那么如何在完成后关闭它?
最佳答案 我遇到了同样的问题,最后以完全不同的方式解决了它.但我会假设使用spawn而不是exec.因为在此
post中,它假定为I / O进程.
If you need to use handle process I/O with streams, such as when you are expecting large amounts of output, use 07001
如果你仍然想使用exec,我已经通过检查npm init进程中的最后一个问题来解决它,然后在写入块之后触发process.exit(0).但这并没有让我高兴,所以我没有用过它.