从shell管道收到数据后,我需要通过提示询问用户。但是,从管道读取数据后,应用程序立即关闭。热门让它等待用户输入?
var readline = require('readline');
var data = '';
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) {
data+=chunk;
}
});
process.stdin.on('end', function() {
console.log('from pipe: ' + data);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('prompt> ', (answer) => {
console.log('from prompt: ', answer);
rl.close();
});
});
当我运行此脚本时
$ echo "pipe" | node app.js
打印
from pipe: pipe
prompt>
立即退出,永远不会等待提示。
我在Windows上,Node v4.2.1
答案 0 :(得分:0)
就像@AlexeyTen在共识中所说的那样,使用ttys包或使用tty的类似包来获取需要来自控制台的输入。
var ttys = require('ttys');
const rl = readline.createInterface({
input: ttys.stdin,
output: ttys.stdout
});
答案 1 :(得分:0)
当stdin被mocha压制时,这些解决方案都不对我有用。相反,我使用了readline-sync
function promptToContinue()
{
const readlineSync = require('readline-sync');
if (readlineSync.keyInYN("WARNING this will destroy your file.\n Press [Y/n] to continue> " ))
{
// User pressed Y or y
return;
} else {
process.exit(-1);
}
}