2

从 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 上,节点 v4.2.1

4

2 回答 2

0

就像@AlexeyTen 在评论中所说,使用ttys包或使用 tty 的类似包,用于需要来自控制台的输入。

var ttys = require('ttys');
const rl = readline.createInterface({
    input: ttys.stdin,
    output: ttys.stdout
});
于 2016-02-23T10:41:26.273 回答
0

当标准输入被 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);
   }
}
于 2019-05-22T16:47:01.790 回答