繁体   English   中英

如何避免节点中的 readline 和 console.log 重叠

How can I avoid overlapping readline and console.log in node

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在此处输入图片说明

const re = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
re.on("line", (order) => {
  if (!this.checkIsCorrectOrder(order)) {
    console.log("Wrong");
    return;
  }
  someFun(order)
}).on("close", () => {
  process.exit();
});

...其他异步

let count = 0
setInterval(()=>{
    console.log(count++)
},1000)

我想在输入的同时避免重叠 readline 和 console.log

我该怎么做?

除了readline还有其他方法吗??? 谢谢!!

1 个回复

我假设你的意思是你想在向终端写入命令的同时输出到终端,而不会被破坏?

还没有完全玩弄它,但到目前为止这对我有用:

var stdin = process.stdin;
var stdout = process.stdout;
var prompt = ">";
var current = "";

stdin.setRawMode(true);
stdin.setEncoding('utf8');
stdout.write(prompt);

stdin.on( 'data', function( key ){
    
    switch (key){
        case '\u001B\u005B\u0041'://up
        case '\u001B\u005B\u0043'://right
        case '\u001B\u005B\u0042'://down
        case '\u001B\u005B\u0044'://left  
        break;
        case '\u0003':
            process.exit();
        break;
        case '\u000d':    
            //RunCommands(current)      
            current = ""; 
            console.log("\b");
            stdout.write(prompt);
        break;
        case '\u007f':
            stdout.write("\r\x1b[K") ;
            current = current.slice(0, -1);
            stdout.write(prompt + current);
        break;
        default:
            stdout.write(key);
            current += key;
        break;
    }
});

function print(str){
    
    let totalCurrentLength = current.length + prompt.length;
    let lines = Math.ceil(totalCurrentLength / stdout.columns);
     
    for(i = 0; i < lines; i++){
        stdout.clearLine();
        stdout.write('\u001B\u005B\u0041');
    }
    
    stdout.write('\u001B\u005B\u0042');
    
    stdout.cursorTo(0)
    console.log(str);
    stdout.write(prompt + current);
}

var count = 0;
setInterval(() => {
    print("Test interference: " + count++)
}, 500);

基本上,我会跟踪每次击键的用户输入并将它们存储在一个字符串中,直到用户按下返回键。 然后我将“当前”字符串发送到我整理和处理所有可能的命令组合的地方。

我一直面临着同样的问题,我认为,输出中断输入。 只要你使用 print()(它几乎像 console.log 一样工作,除了你必须传递一个参数,它确实处理粉笔和其他东西)它应该可以正常工作。

请注意,我禁用了顶部的箭头键,因此按下箭头不会移动光标并将其弄乱。

'current' 应该是您在终端中为应用程序编写的命令字符串,我创建了一个函数来处理所有可能的命令行函数。

2 console.log是节点中的意外标识符

我试图运行一个基本的节点应用程序。 我只想打印我的stdin的内容。 这是代码: 运行代码时,出现以下错误: 为什么node无法识别我的console.log ? ...

2015-02-06 19:00:03 1 2141   node.js
3 readline在后台使用console.log

我遇到了node.js的readline问题。 下面显示的是控制台输出:粗体的东西是我正在键入的内容,其余的是服务器正在记录的内容。 简而言之,我的代码看起来像这样 setInterval(function() { console.log("log message") }, 1000 ...

2012-05-15 18:37:15 1 1421   node.js
4 节点 - Console.log 打印多次

我有一段代码,只是使用console.log打印一个变量,Node 正在多次打印输出。 知道可能是什么问题吗? var router = express.Router(); var isJob = true; console.log(isJob) // Five times output is g ...

6 如何在节点的 console.log() 中创建换行符

打印多个对象时,有没有办法在 console.log 中获取新行? 假设我们有console.log(a,b,c)其中a 、 b和c是对象。 有没有办法在对象之间换行? 我尝试console.log(a,'\\n',b,'\\n',c)但这在节点中不起作用 ...

8 readline请求输入有问题(可能是由于console.log)

我整理了一个脚本,用于通过readline抓取用户输入。 失败的逻辑的简化版本如下: 当我运行上面的命令时,输出是: 在调用logic()之后,罪魁祸首似乎是console.log() logic() 。 如果我将其删除,则按预期请求数据并继续操作。 但是在readline ...

10 Console.log节点API数据

这可能会很容易,但是我碰壁了。 我要做的是使用GET Request命中一个端点,然后将该数据漂亮地打印到控制台。 本来我以为我应该使用app.get('/'); 因为这是我做Hello World的方式,而且在构建简单的端点“ api / contacts”时也是如此。 我的总体目标只 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM