1

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

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

现在程序还应该能够从系统外壳读取通过管道传输到标准输入的输入,即:

$ myprog < myfile.txt

它解析输入,但使用 readline.question 会逐行解析。这会破坏一些跨越不同行的输入代码。

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

4

1 回答 1

4

你可以检查一下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');
}
于 2015-02-18T14:27:12.970 回答