Node.js如何在从shell管道

时间:2016-02-23 08:46:36

标签: node.js stdin prompt node.js-stream

从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

2 个答案:

答案 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);
   }
}