如何擦除控制台中打印的字符

时间:2012-07-22 13:59:46

标签: node.js

我一直在搜索如何用其他语言进行操作,我发现我必须使用特殊字符\ b来删除最后一个字符。 (how-do-i-erase-printed-characters-in-a-console-applicationlinux

对于对console.log();

的多次调用中的node.js,这不起作用

如果我写一个日志:

console.log ("abc\bd");

我得到了结果:abd

但如果我写:

console.log ("abc");
console.log ("\bd");

我得到了结果:

ABC
d

我的目标是打印一条等待的消息:

等待
等待。
等待..
等待...

再次:

等待
等待。

都在同一行。

6 个答案:

答案 0 :(得分:119)

process.stdout有一些功能:

var i = 0;  // dots counter
setInterval(function() {
  process.stdout.clearLine();  // clear current text
  process.stdout.cursorTo(0);  // move cursor to beginning of line
  i = (i + 1) % 4;
  var dots = new Array(i + 1).join(".");
  process.stdout.write("Waiting" + dots);  // write text
}, 300);

更新 2015年12月13日:虽然上述代码有效,但不再将其记录为process.stdin的一部分。它已移至readline

答案 1 :(得分:18)

现在您可以使用readline库及其API来完成这些工作。

答案 2 :(得分:15)

覆盖同一行的最简单方法是

var dots = ...
process.stdout.write('Progress: '+dots+'\r');

\r是关键。它会将光标移回到行的开头。

答案 3 :(得分:0)

这对我有用:

process.stdout.write('\033c');
process.stdout.write('Your text here');

答案 4 :(得分:0)

使用回程车

回车符将光标移回当前行的开头。

process.stdout.write("\r");

此解决方案对我有用-我只用一个字符对其进行了测试。

答案 5 :(得分:-3)

尝试在字符串的开头移动\ r \ n,这适用于我:

for (var i = 0; i < 10000; i+=1) {
    setTimeout(function() {
        console.log(`\r ${i}`);
    }, i);
}