从标准输入读取行或整个缓冲区 (node.js)
Reading lines or whole buffer from stdin (node.js)
我正在 node.js 中开发交互式控制台界面,用于解析和编译输入。为此,我使用 readline.question:
require('readline').question('> ', processCommandFunction)
现在程序还应该能够从系统 shell 读取通过管道传输到标准输入的输入,即:
$ myprog < myfile.txt
它解析输入,但是 readline.question 它是逐行解析的。这会破坏一些跨越不同行的输入代码。
我想更改程序的行为,以便在交互式使用时,它会逐行处理(就像现在一样),但是当一个文件通过管道传输给它时,它应该在一个块中处理整个文件。所以我不知何故需要检查换行后是否有更多数据。有人可以给我指出正确的方向吗?
您可以查看 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');
}
我正在 node.js 中开发交互式控制台界面,用于解析和编译输入。为此,我使用 readline.question:
require('readline').question('> ', processCommandFunction)
现在程序还应该能够从系统 shell 读取通过管道传输到标准输入的输入,即:
$ myprog < myfile.txt
它解析输入,但是 readline.question 它是逐行解析的。这会破坏一些跨越不同行的输入代码。
我想更改程序的行为,以便在交互式使用时,它会逐行处理(就像现在一样),但是当一个文件通过管道传输给它时,它应该在一个块中处理整个文件。所以我不知何故需要检查换行后是否有更多数据。有人可以给我指出正确的方向吗?
您可以查看 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');
}