1

入力を解析してコンパイルする node.js でインタラクティブなコンソール インターフェイスを開発しています。この目的のために、readline.question を使用しています。

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

これで、プログラムは、システム シェルから stdin にパイプされた入力を読み取ることもできるようになります。つまり、次のようになります。

$ myprog < myfile.txt

入力を解析しますが、readline.question では行ごとに解析します。これにより、別々の行にまたがる一部の入力コードが壊れます。

プログラムの動作を変更して、対話的に使用する場合は (現在のように) 1 行ずつ処理するようにしますが、ファイルをパイプする場合は、ファイル全体を 1 つのチャンクで処理する必要があります。したがって、改行の後にさらにデータが来るかどうかを何らかの方法で確認する必要があります。誰かが私を正しい方向に向けることができますか?

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 に答える