从stdin读取行或整个缓冲区(node.js)

时间:2015-02-18 14:10:07

标签: node.js node.js-stream

我正在node.js中开发一个交互式控制台界面,用于解析和编译输入。为此我使用readline.question:

require('readline').question('> ', processCommandFunction)

现在程序也应该能够从系统shell中读取管道输入到stdin的输入,即:

$ myprog < myfile.txt

它解析输入,但是使用readline.question它逐行进行。这打破了一些跨越单独行的输入代码。

我想改变程序的行为,以便在交互使用时,它逐行处理(就像当前一样),但是当文件通过管道传输时,它应该在一个块中处理整个文件。所以我需要检查一下换行后是否还有更多的数据。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您可以查看process.stdin.isTTY。如果是true,则使用readline作为交互模式。如果它不是true,那么只需将process.stdin中的数据手动读取为可读流。

示例:

if (process.stdin.isTTY) {
  // do readline stuff here
} else {
  var buf = '';
  process.stdin.on('data', function(d) {
    buf += d;
  }).on('end', function() {
    // do something with buffered text in `buf`
  }).setEncoding('utf8');
}