节点:快速退出事件后读取spader stderr/stdout?

问题描述:

我使用Node的spawn来创建一个新进程。有时候,这个过程会很快退出,并在stderr上显示错误代码和消息。看起来stderr在这个快速转机中迷路了。我已经试过这样:节点:快速退出事件后读取spader stderr/stdout?

reader.stderr.on('data', function (buf) { 
     console.log('stderr message: ' + buf); 
    }); 

    reader.on('exit', function (code, signal) { 
     console.log('Exit'); 
    }); 

输出:

Exit 
    stderr message: ERROR: Missing required option for command. 

我也试过在exit收听阅读它,但没有运气:

 reader.on('exit', function (code, signal) { 
     console.log('Exit'); 
     console.log('stderr: ' + reader.stderr.read()); 
    }); 

输出:

Exit 
    stderr: null 

所以,看来问题是th在stderr输出速度太慢,并且在我需要该信息的退出事件之后很晚。我怎样才能解决这个问题?

child_process docs for exit摘自:

注意,子进程的stdio流可能仍然是开放的。

然后,他们形容close事件:

当一个子进程的标准输入输出流已经全部终止时发出此事件。这与“退出”不同,因为多个进程可能共享相同的stdio流。

所以看起来你应该使用close而不是exit