【问题标题】:createInterface prints double in terminalcreateInterface 在终端打印双倍
【发布时间】:2014-07-09 19:01:08
【问题描述】:

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

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

当我运行这段代码时,我在终端中输入的所有内容都是重复的。输入“hello world”会产生:

hheelloo  wwoorrlldd

我想这样做是有道理的,因为 readline 模块旨在将输入传递到输出。但它不也是用来创建命令行界面的吗?我对我应该如何使用它感到困惑。帮忙?

【问题讨论】:

    标签: node.js readline


    【解决方案1】:

    尝试使用terminal: false

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

    【讨论】:

    • F.H.你仍然可以使用退格键。默认情况下,您的线路应由您的终端缓冲,直到您按回车后才会发送
    • 这解决了问题,但使用 tab 和箭头键等终端功能丢失了
    【解决方案2】:

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

    【讨论】:

    • 这是我项目的问题。谢谢。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 2015-06-17
      • 2015-08-07
      • 2013-06-27
      • 2013-09-14
      • 2011-12-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多