Чтение строк или всего буфера из 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');
}
Другие вопросы по тегам