Node.js 在'之前写入流;结束';事件被触发

Node.js 在'之前写入流;结束';事件被触发,node.js,node.js-stream,Node.js,Node.js Stream,我将几个子进程与Node.js父进程一起使用,并将所有的stderr从子进程传输到一个文件 像这样: const strmPath = path.resolve(projRoot + '/suman/stdio-logs/runner-stderr.log'); const strm = fs.createWriteStream(strmPath); //before I call pipe I write some stuff to the log file

我将几个子进程与Node.js父进程一起使用,并将所有的stderr从子进程传输到一个文件

像这样:

    const strmPath = path.resolve(projRoot + '/suman/stdio-logs/runner-stderr.log');
    const strm = fs.createWriteStream(strmPath);


    //before I call pipe I write some stuff to the log file
    strm.write('\n\n>>> Suman start >>>\n');
    strm.write('Beginning of run at ' + Date.now() + ' = [' + new Date() + ']' + '\n');
    strm.write('Command = ' + JSON.stringify(process.argv) + '\n');


    // when the parent process exits, I want to write one more line to the log file

    process.on('exit', function (code, signal) {

        strm.write('<<<<<< Suman runner end <<<<<<\n');


    });
问题是在process.on('exit')发生之前,在流上触发“end”事件。事实上,在调用“end”之前,似乎没有办法钩住流写入它;实际上,我正在寻找某种方法来钩住流,以便在调用end之前,我至少可以向它写入一次

有办法做到这一点吗


(顺便说一句,我也在寻找一种方法,通过管道将子进程stderr流直接传输到文件,而不必首先经过父进程。我可能只需在每个
子进程中调用
process.stderr.pipe()

就可以做到这一点,这可能会有所帮助:

此处,当
n.stdio[2]
关闭时,
strm
的自动关闭被阻止。因此,您可以使用最后一块块块手动结束
strm

n.stdio[2]
.on('end', function(){
  strm.end('<<<<<< Suman runner end <<<<<<\n');
})
.pipe(strm, {end: false})
n.stdio[2]
.on('end',function(){
标准结束('
n.stdio[2]
.on('end', function(){
  strm.end('<<<<<< Suman runner end <<<<<<\n');
})
.pipe(strm, {end: false})