createInterface在terminal中双击打印

当使用readline接口时,标准input的所有内容都被打印两次到stdout:

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

当我运行这个代码时,我在terminal中input的所有内容都是重复的。 打字'你好世界'收益率:

 hheelloo wwoorrlldd 

我猜这是有道理的,因为readline模块是为了将inputpipe道输出到输出。 但是它不是也用来创build命令行界面吗? 我很困惑,我该怎么使用它。 帮帮我?

尝试使用terminal: false

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

我也遇到了这个问题,并通过确保一次只有一个readline.interface实例来解决这个问题。 我会build议在它正在使用的函数中对界面进行界定,这样一旦你离开这个上下文,它就被清理了。 或者,您可以简单地声明在应用程序中随处使用的全局实例。 这里的底层问题是,当你有两个(或更多)实例监听相同的inputstream( process.stdin )时,它们都将接收到任何input,并将它们处理/发送到相同的输出stream( process.stdout )。 这就是为什么你看到双。

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

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