javascript - 防止 Node.js 控制台中的输入/输出混合?

标签 javascript node.js

我刚刚成功让 Node.js minecraft 机器人 API(名为 mineflayer )正常工作。当我上次制作我的世界机器人时(用C++,完全由我自己),我遇到了一个问题when writing in the console, the server messages would mix with whatever I'm writing 。当时得到的答案似乎太复杂/不清楚,所以我放弃了。

现在我希望 Node.js 能够解决这个问题,但显然没有。 Node.js 有简单的解决方案吗?我想要的是这样的:

image description

但是现在,我正在编写的命令与输出混合在一起(红色是写入输入,绿色是控制台输出,使用 GIMP 着色):

image description

我正在使用 readline 模块:

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

rl.on('line', function(line) {
  var inp = line.trim();
  //Bot internal commands start with ~
  if(line[0]=='~') {
    command(line.substr(1));
  }
  else {
    //use server chat
    bot.chat(line);
  }
});

最佳答案

我从一个简单的功能示例开始,只是为了向您展示一种方法:

var
    readline = require("readline"),
    ansi = require('ansi');

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

ansi.clear();
ansi.row(1);

rl.on('line', function(line) {

    ansi.row(2);
    ansi.clearLine();
    ansi.print(line);

    ansi.row(1);
    ansi.clearLine();
});

ansi 是我几个月前进行的一个简单测试,用于使用 ANSI escape codes 操作终端线。 。要使用它,只需在与上述代码相同的文件夹中运行以下命令:

npm install https://github.com/luciopaiva/ansi.git

您可以直接访问 my library's repository 查看我的代码.

代码非常简单,我建议您复制它并根据您的需要进行调整。

ansi.clear() 只是清除整个终端,然后 ansi.row(1) 将光标移动到第一行,您可以在其中输入命令。在我的简单示例中,代码将仅将用户在按回车键之前键入的内容打印到第 2 行。然后只需运行上面的代码即可查看其工作原理,并将其调整为沿终端的其余行滚动消息的机制。

关于javascript - 防止 Node.js 控制台中的输入/输出混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359231/

相关文章:

javascript - Grunt 任务退出并出现总线错误 : 10

node.js - mongodb如何使用get.find(….),像sql的LIKE操作?

javascript - 类型错误 : The header content contains invalid characters

javascript - multer 可能有问题?错误 : Router. use() 需要回调

javascript - 如何使用KnockoutJS将数据保存到SQL数据库中?

Javascript - 淡入淡出显示 :none

javascript - 如何使用 javascript 从外部 html 页面加载 div?

javascript - 使用 javascript(也许是正则表达式)格式化 DATE

javascript - 如何更改 Discord.js 机器人的状态?

node.js - 迁移时 Knex 池已满