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

Gab*_*mas 69 node.js

我一直在寻找如何用其他语言来做,我发现我必须使用特殊字符\ b来删除最后一个字符.(how-do-do-do-erase-printed-characters-in-a-console-applicationlinux)

这对于对console.log()的多次调用中的node.js不起作用;

如果我写一个日志:

console.log ("abc\bd");
Run Code Online (Sandbox Code Playgroud)

我得到了结果:abd

但如果我写:

console.log ("abc");
console.log ("\bd");
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

abc
d

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

等待
等待.
等待......
等待......

然后再次:

等待
等待.
等等

都在同一条线上.

pim*_*vdb 123

有以下功能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);
Run Code Online (Sandbox Code Playgroud)

2015年12月13日更新:尽管上述代码有效,但不再将其记录为部分内容process.stdin.它已经搬到了readline

  • @pimvdb这些函数记录在哪里?它们似乎不在Node文档中:http://nodejs.org/api/process.html#process_process_stdout (6认同)
  • 这似乎不适用于OSX,有人知道它应该吗? (5认同)
  • API 可能已更改。这个答案是两年前写的,任何 JS 开发人员至少应该知道过去两年发生了多少变化。我们已经从几种编译为 JS 的语言(最著名的是 CoffeeScript)转译为即将发布的最新版本 ES6。两年前,如果我没记错的话,ES6 模块甚至不存在。 (2认同)

gob*_*was 18

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

  • 不值得使用 lib `require` (2认同)

jon*_*mps 16

覆盖同一条线的最简单方法是

var dots = ...
process.stdout.write('Progress: '+dots+'\r');
Run Code Online (Sandbox Code Playgroud)

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

  • '\ r'唯一的问题是它不能清除当前行.所以,如果你第一次写"abcdefg\r",下次你用"zyxwefg"写"zyxw\r". (8认同)
  • 不在OP的情况下. (8认同)