如何从Node.js中的stdin多次读取多行?

时间:2018-09-16 09:15:20

标签: node.js programming-languages

我创建了此函数以从标准输入中读取多行:

async function readLines() {
  const io = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
  });

  const lines = [];
  io.on('line', line => lines.push(line));

  let endOfFile;
  io.on('close', () => endOfFile(lines));
  return new Promise(resolve => endOfFile = resolve);
}

当我这样多次调用此函数时:

(async () => {

  console.log(await readLines());
  console.log(await readLines());

})().catch(console.error);

,然后尝试按Ctrl+D结束行的阅读, 只有第一个调用从标准输入中读取,所有后续调用都将被忽略。

是否有可能以某种方式重新打开标准输入以能够多次调用此函数?

或者,以另一种方式问:为什么在按下Ctrl+D组合键之后,node.js会关闭标准输入?

在按下Ctrl+D之后,其他语言(如ruby或python)允许从标准输入中读取。例如,以下用ruby编写的代码可以按预期工作:

def read_lines
    lines = []
    while line = gets
        lines << line.chomp
    end
    lines
end

pp read_lines
pp read_lines

为什么node.js的行为有所不同?

0 个答案:

没有答案