Node.js 在'之前写入流;结束';事件被触发
我将几个子进程与Node.js父进程一起使用,并将所有的stderr从子进程传输到一个文件 像这样: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
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})