node.js – exec’npm init’以编程方式使用node子进程,但无法知道它何时完成

我使用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).但这并没有让我高兴,所以我没有用过它.

点赞