如何在terminal重写输出

我有一个Python脚本,我想让它在terminal显示一个从0到100%的递增数字。 我知道如何打印terminal上的数字,但我怎么能“重写”他们,所以0变成1,1,变成2,依此类推直到100?

打印不带换行符的回车( \r )会将光标重新设置到行首,使下一次打印覆盖已经打印的内容:

 import time import sys for i in range(100): print i, sys.stdout.flush() time.sleep(1) print "\r", 

这不会清除该行,所以如果尝试使用此方法打印减少的数字,则会看到之前打印的剩余文字。 您可以通过用空格填充输出或使用其他答案中的一些控制代码来解决此问题。

这个配方在这里应该是有用的。 使用该模块作为TC,下面的代码做你想要的:

 from tc import TerminalController from time import sleep import sys term = TerminalController() for i in range(10): sys.stdout.write("%3d" % i) sys.stdout.flush() sleep(2) sys.stdout.write(term.BOL + term.CLEAR_EOL) 

配方使用terminfo来获取有关终端的信息,并在Linux和OS X上为许多终端工作。 不过,它在Windows上不起作用。 (感谢piquadrat测试,根据下面的评论)。

编辑 :该配方还提供了使用颜色和重写部分行的功能。 它还有一个现成的文本进度条。

使用祝福包 – 清除屏幕(清除/清除)并输入:

 import sys from blessings import Terminal from time import sleep # <- boy, does this sound tempting atm term = Terminal() for i in range(6): with term.location(term.width - 3, term.height - 3): print('{}'.format(i)) sleep(2) if (i == 3): print('what was I doing, again?') print('done') 

从CheeseShop安装它,只是…

 pip install blessings 

基于这个答案 ,但没有终端控制器:

 import time import sys for i in range(100): sys.stdout.write("Downloading ... %s%%\r" % (i)) sys.stdout.flush() time.sleep(1) 

测试GNOME终端(Linux)和Windows控制台。

提示:不要在IDLE编辑器中运行这个例子。