我一直想知道人们如何更新命令行中的上一行.一个很好的例子就是在linux中使用wget命令.它会创建一个类似于此的ASCII加载栏:
[======>] 37%
当然,加载条移动并且百分比发生变化,但它不会形成一条新线.我无法弄清楚如何做到这一点.有人能指出我正确的方向吗?
Gre*_*ill 57
一种方法是使用当前进度重复更新文本行.例如:
def status(percent):
sys.stdout.write("%3d%%\r" % percent)
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
请注意,我使用sys.stdout.write而不是print(这是Python),因为print在每行的末尾自动打印"\ r \n"(回车换行).我只想要回车,它将光标返回到行的开头.此外,这flush()是必要的,因为默认情况下,sys.stdout只在换行符之后(或在其缓冲区变满之后)刷新其输出.
haz*_*zen 43
我知道有两种方法可以做到这一点:
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<int>(len * percent)) {
progress += "=";
} else {
progress += " ";
}
}
cout << "[" << progress << "] " << (static_cast<int>(100 * percent)) << "%";
flush(cout); // Required.
}
Run Code Online (Sandbox Code Playgroud)
ice*_*nac 17
秘诀是只打印\ r而不是\n或\ r \n在行的和.
\ r被称为回车,它将光标移动到行的开头
\n称为换行,它将光标移动到下一行的控制台中.如果您只使用\ r,则覆盖以前写入的行.所以先写一行如下:
[ ]
Run Code Online (Sandbox Code Playgroud)
然后为每个刻度添加一个符号
\r[= ]
\r[== ]
...
\r[==========]
Run Code Online (Sandbox Code Playgroud)
等等.你可以使用10个字符,每个字符代表10%.此外,如果要在完成时显示消息,请不要忘记添加足够的白色字符,以便覆盖以前写入的等号,如下所示:
\r[done ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32201 次 |
| 最近记录: |