如何在终端中重写输出
我有一个Python脚本,我想让它在终端上显示一个从0到100%的递增数字。我知道怎么在终端上打印数字,但我想知道怎么“重写”这些数字,让0变成1,1变成2,依此类推,一直到100。
4 个回答
3
使用 blessings这个包 - 清屏(也就是让屏幕变空,像在命令行里输入clear或cls),然后输入:
import sys
from blessings import Terminal
from time import sleep # <- boy, does this sound tempting a.t.m.
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
5
这个食谱 在这里 应该会对你有帮助。使用那个模块作为 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 的测试,正如下面的评论所说)。
编辑:这个食谱还提供了使用颜色和重写部分行的功能。它还包含一个现成的文本进度条。
26
打印一个回车符(\r
)而不换行,会把光标移到当前行的开头,这样下一次打印的内容就会覆盖掉之前打印的内容:
import time
import sys
for i in range(100):
print i,
sys.stdout.flush()
time.sleep(1)
print "\r",
这样并不会清空这一行,所以如果你用这种方法打印递减的数字,你会看到之前打印的内容还留在那儿。你可以通过在输出的内容后面加上空格,或者使用其他答案中提到的一些控制代码来解决这个问题。