Чтение строк или всего буфера из stdin (node.js)
Я разрабатываю интерактивный консольный интерфейс в node.js, который анализирует и компилирует ввод. Для этого я использую readline.question:
require('readline').question('> ', processCommandFunction)
Теперь программа также должна иметь возможность читать входные данные из системной оболочки, передаваемые по каналу, то есть:
$ myprog < myfile.txt
Он анализирует ввод, но с readline.question делает это построчно. Это нарушает некоторый входной код, который охватывает отдельные строки.
Я хотел бы изменить поведение программы так, чтобы при интерактивном использовании она обрабатывала построчно (как это происходит в настоящее время), но когда к ней передается файл, она должна обрабатывать весь файл в одном фрагменте. Поэтому мне нужно как-то проверить, поступают ли еще данные после разрыва строки. Может кто-нибудь, пожалуйста, укажите мне правильное направление?
1 ответ
Вы можете проверить 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');
}