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

时间:2014-10-19 02:48:23

标签: node.js spawn

我正在使用Node spawn来创建新流程。有时,此过程将很快退出,并在stderr上显示错误代码和消息。似乎stderr在这个快速转变中迷失了方向。我试过这个:

    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

所以,似乎问题是stderr输出太慢,并且在我需要该信息的退出事件之后很晚。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

取自child_process docs for exit

  

请注意,子进程stdio流可能仍处于打开状态。

然后他们描述了close事件:

  

当子进程的stdio流全部终止时,将发出此事件。这与'退出'不同,因为多个进程可能共享相同的stdio流。

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