首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使命令行具有动画效果?

如何使命令行具有动画效果?
EN

Stack Overflow用户
提问于 2008-09-13 00:53:11
回答 8查看 38.1K关注 0票数 81

我一直想知道人们是如何更新命令行中的前一行的。在linux中使用wget命令就是一个很好的例子。它创建了一个ASCII加载栏,如下所示:

======>                    37%

当然,加载条会移动,百分比也会发生变化,但不会产生新的线。我想不出该怎么做。谁能给我指个方向?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-13 00:56:00

我知道有两种方法可以做到这一点:

  • 使用退格转义字符('\b')擦除您的行
  • 如果您选择的编程语言具有绑定,请使用curses包。

谷歌还透露了ANSI Escape Codes,这似乎是一个很好的方式。作为参考,下面是C++中的一个函数来执行此操作:

代码语言:javascript
复制
void DrawProgressBar(int len, double percent) {
  cout << "\x1B[2K"; // Erase the entire current line.
  cout << "\x1B[0E"; // Move to the beginning of the current line.
  string progress;
  for (int i = 0; i < len; ++i) {
    if (i < static_cast<int>(len * percent)) {
      progress += "=";
    } else {
      progress += " ";
    }
  }
  cout << "[" << progress << "] " << (static_cast<int>(100 * percent)) << "%";
  flush(cout); // Required.
}
票数 46
EN

Stack Overflow用户

发布于 2008-09-13 00:58:24

要做到这一点,一种方法是使用当前进度重复更新文本行。例如:

代码语言:javascript
复制
def status(percent):
    sys.stdout.write("%3d%%\r" % percent)
    sys.stdout.flush()

请注意,我使用的是sys.stdout.write而不是print (这是Python),因为print会自动在每行的末尾打印"\r\n“(回车换行符)。我只需要回车符,它将光标返回到行首。此外,flush()也是必需的,因为在默认情况下,sys.stdout仅在换行符之后(或缓冲区满后)才刷新其输出。

票数 58
EN

Stack Overflow用户

发布于 2014-10-06 23:04:36

秘诀是只打印\r,而不是在和行尾打印\n或\r\n。

\r称为回车符,它在行首移动光标

\n称为换行符,它将光标移动到控制台中的下一行。如果仅使用\r,则会覆盖之前写入的行。因此,首先编写一行代码,如下所示:

代码语言:javascript
复制
[          ]

然后为每个刻度添加一个符号

代码语言:javascript
复制
\r[=         ]

\r[==        ]

...

\r[==========]

诸若此类。您可以使用10个字符,每个字符代表10%。此外,如果您想在完成后显示一条消息,请不要忘记添加足够的白色字符,以便覆盖之前编写的等号,如下所示:

代码语言:javascript
复制
\r[done      ]
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档