createInterface在终端中打印double

时间:2014-07-09 19:01:09

标签: node.js readline

使用readline接口时,stdin的所有内容都会被打印两次到stdout:

var rl = require('readline');
var i = rl.createInterface(process.stdin, process.stdout);

当我运行此代码时,我在终端中键入的所有内容都是重复的。打字' hello world'产率:

hheelloo  wwoorrlldd

我认为这样做是有意义的,因为readline模块意味着将输入传递给输出。但它是否也意味着用于创建命令行界面?我对如何使用它感到困惑。帮助

3 个答案:

答案 0 :(得分:24)

尝试使用terminal: false

var readline = require("readline");
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

答案 1 :(得分:4)

我也有这个问题,我通过确保一次只有一个readline.interface的实例来修复它。我建议在使用它的函数中确定接口的范围,这样一旦你离开那个上下文,它就会被清理掉。或者,您可以简单地声明在应用程序中的任何位置使用的全局实例。这里的根本问题是,当你有两个(或更多)实例监听相同的输入流(process.stdin)时,它们都将接收任何输入,它们将处理它/将其发送到相同的输出流( process.stdout)。这就是你看到双倍的原因。

答案 2 :(得分:-2)

您应该使用选项对象格式:

var i = rl.createInterface({
  input: process.stdin,
  output: process.stdout
});
相关问题