【发布时间】:2020-05-07 17:59:40
【问题描述】:
在某一时刻,我认为您可以告诉 Node.js 子进程通过换行符来分块数据。如下所示,来自子进程的 stderr 数据事件正在触发字符和单词,而不是行。理想情况下,我可以传递一个标志来告诉流仅在一行数据准备好时触发数据事件。没有办法吗?
我有这个:
const sh = spawn('sh', [ b ], {
cwd: cwd,
});
sh.stdout.pipe(fs.createWriteStream('/dev/null'));
var stderr = '';
var line = '';
sh.stderr.setEncoding('utf8');
sh.stderr.on('data', function (d) {
//trying to split by newlines, but this is hairy logic
const lines = String(d).split('\n');
line += lines.shift();
if(lines.length > 0){
if (!String(d).match(/npm/ig) && !String(d).match(/npm/ig)) {
stderr += d;
process.stderr.write.apply(process.stderr, arguments);
}
}
});
并且在这个处理程序中返回的数据不是整行
sh.stderr.on('data', function (d) {
// d is chunks of data but not whole lines
});
有没有办法告诉 stderr 在触发 'data' 事件之前等待换行符?
【问题讨论】:
标签: javascript node.js