我刚刚成功让 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 有简单的解决方案吗?我想要的是这样的:
但是现在,我正在编写的命令与输出混合在一起(红色是写入输入,绿色是控制台输出,使用 GIMP 着色):
我正在使用 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/