[英]Prevent input/output mixing in Node.js console?
我只是設法使Node.js minecraft機器人API(稱為mineflayer )能夠正常工作。 當我上次制作Minecraft bot時(全部由C ++ 編寫 ),我遇到一個問題,即在控制台中進行編寫時,服務器消息會與我正在編寫的內容混合在一起 。 那時我得到的答案似乎太復雜/不清楚,所以我放棄了。
現在我希望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轉義碼處理端子線。 要使用它,只需在與上面的代碼相同的文件夾中運行以下命令:
npm install https://github.com/luciopaiva/ansi.git
您可以直接進入我的圖書館的資料庫來檢查我的代碼。
該代碼非常簡單,我建議您復制它並適應您的需求。
ansi.clear()
僅清除整個終端,然后ansi.row(1)
將光標移至第一行,您將可以在其中輸入命令。 在我的簡單示例中,代碼將僅在用戶按回車鍵之前輸入的內容打印到第2行。 然后,只需運行上面的代碼即可查看其工作原理,並使其適應於沿終端其余行滾動消息的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.