簡體   English   中英

防止在Node.js控制台中進行輸入/輸出混合?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM