如何在节点中逐行读取标准输入

新手上路,请多包涵

我正在寻找使用如下命令行调用处理带有节点的文本文件:

node app.js < input.txt

文件的每一行都需要单独处理,但一旦处理,输入行可能会被遗忘。

使用标准输入的数据监听器,我得到按字节大小分块的输入流,所以我设置了它。

 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);
});

但这似乎太草率了。必须围绕线阵列的第一个和最后一个项目进行按摩。没有更优雅的方法来做到这一点吗?

原文由 Matt R. Wilson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 646
2 个回答

您可以使用 readline 模块逐行读取标准输入:

 const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

rl.on('line', (line) => {
    console.log(line);
});

rl.once('close', () => {
     // end of input
 });

原文由 levi 发布,翻译遵循 CC BY-SA 4.0 许可协议

// Work on POSIX and Windows
var fs = require("fs");
var stdinBuffer = fs.readFileSync(0); // STDIN_FILENO = 0
console.log(stdinBuffer.toString());

原文由 Zealic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题