Node.jsのreadlineモジュールを使用してユーザーからの情報をキャプチャしてキャプチャするCLIのテストを作成しようとしています。 stdout。私が直面している問題の簡単なバージョンは以下のとおりです。readline.write()がstdoutに到着しない
app.js:
#!/usr/bin/env node
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.write('hello\n')
process.exit()
runner.js:runner.js
を実行している
const spawn = require('child_process').spawn
const rl = spawn(__dirname + '/app.js')
rl.stdout.on('data', chunk => {
console.log('stdout says', chunk.toString())
})
は、私が出力stdout says hello
が、何も印刷を見ることを期待します。
ただし、app.js
を直接実行すると、hello
がコンソールに表示されます。さらに、question
のような他のreadlineメソッドを使用すると、ハンドラは予期されたデータで起動します。
なぜこのコードは期待どおりに機能しませんか?どのように仕事に変えることができますか? readlineのインタフェースのインスタンスを作成する際に、「端末」として真定義:
このソリューションは機能しますが、なぜですか? readlineインタフェースはすでにstdoutに接続されており、その出力は端末ではなく 'data'ハンドラによって読み込まれています。 – user6689821
@ user6689821、解答に今説明が追加されました:) – shaochuancs
ありがとう@shaochuancs。私はまだ 'write'がデフォルトで出力ストリームを無視するのはなぜか混乱しています(なぜ書くのではなく書くのはなぜですか?)が、コードを見ていただきありがとうございます。 – user6689821