我正在寻找使用命令行调用处理节点的文本文件,如:
node app.js < input.txt
文件的每一行都需要单独处理,但一旦处理,输入行就会被遗忘 .
使用stdin的on-data监听器,我得到一个字节大小的输入蒸汽,所以我设置了它 .
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lingeringLine = "";
process.stdin.on('data', function(chunk) {
lines = chunk.split("\n");
lines[0] = lingeringLine + lines[0];
lingeringLine = lines.pop();
lines.forEach(processLine);
});
process.stdin.on('end', function() {
processLine(lingeringLine);
});
但这似乎很草率 . 必须按线阵列的第一个和最后一个项目 . 有没有更优雅的方式来做到这一点?
6 回答
readline
专门设计用于终端(即proccess.stdin.isTTY === true
) . 有许多模块为通用流提供分离功能,例如split . 它让事情变得非常简单:您可以使用readline模块逐行读取stdin:
在我的情况下,程序(elinks)返回看起来为空的行,但实际上有特殊的终端字符,颜色控制代码和退格,所以在其他答案中提供的
grep
选项对我不起作用 . 所以我在Node.js中写了这个小脚本 . 我调用了文件tight
,但这只是一个随机名称 .为他人分享:
逐行读取流,应该是大型文件管道输入stdin,我的版本: