我想爲使用Node.js的readline模塊從用戶打印和捕獲信息的CLI編寫測試,但我似乎無法捕獲任何東西標準輸出。我正面臨的一個簡單版本的問題如下。readline.write()沒有到達標準輸出
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
會打印到控制檯。此外,如果我使用其他readline方法(如question
),處理程序將使用期望的數據進行觸發。
爲什麼不按預期工作?如何改變工作?
該解決方案有效,但爲什麼? readline接口已經連接到stdout,其輸出被'data'處理程序讀取,而不是終端。 – user6689821
@ user6689821,現在在回答中加上解釋:) – shaochuancs
謝謝@shaochuancs。我仍然有點困惑,爲什麼'write'會默認忽略輸出流(爲什麼要寫它,如果它不寫?),但我真的很感謝你通過代碼。 – user6689821