当前位置:  开发笔记 > 编程语言 > 正文

如何为命令行设置动画?

如何解决《如何为命令行设置动画?》经验,为你挑选了3个好方法。

我一直想知道人们如何更新命令行中的上一行.一个很好的例子就是在linux中使用wget命令.它会创建一个类似于此的ASCII加载栏:

[======>] 37%

当然,加载条移动并且百分比发生变化,但它不会形成一条新线.我无法弄清楚如何做到这一点.有人能指出我正确的方向吗?



1> Greg Hewgill..:

一种方法是使用当前进度重复更新文本行.例如:

def status(percent):
    sys.stdout.write("%3d%%\r" % percent)
    sys.stdout.flush()

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



2> hazzen..:

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

使用退格符转义符('\ b')删除您的行

curses如果您选择的编程语言具有绑定,请使用该包.

谷歌发布了ANSI逃逸代码,这似乎是一个好方法.作为参考,这是C++中的一个函数来执行此操作:

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(len * percent)) {
      progress += "=";
    } else {
      progress += " ";
    }
  }
  cout << "[" << progress << "] " << (static_cast(100 * percent)) << "%";
  flush(cout); // Required.
}


假设他在最新版本的Windows(即2000+)上运行Win32控制台应用程序(而不是DOS),ANSI转义码根本不起作用.正如您链接到的维基百科文章中所述.

3> icenac..:

秘诀是只打印\ r而不是\n或\ r \n在行的和.

\ r被称为回车,它将光标移动到行的开头

\n称为换行,它将光标移动到下一行的控制台中.如果您只使用\ r,则覆盖以前写入的行.所以先写一行如下:

[          ]

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

\r[=         ]

\r[==        ]

...

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

等等.你可以使用10个字符,每个字符代表10%.此外,如果要在完成时显示消息,请不要忘记添加足够的白色字符,以便覆盖以前写入的等号,如下所示:

\r[done      ]

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有