【发布时间】:2011-03-30 03:46:38
【问题描述】:
我有一个 Python 脚本,我想让它在终端中显示从 0 到 100% 的递增数字。我知道如何在终端上打印数字,但如何“重写”它们,使 0 变为 1,将 1 变为 2,依此类推直到 100?
【问题讨论】:
我有一个 Python 脚本,我想让它在终端中显示从 0 到 100% 的递增数字。我知道如何在终端上打印数字,但如何“重写”它们,使 0 变为 1,将 1 变为 2,依此类推直到 100?
【问题讨论】:
这个食谱here 应该很有用。将该模块用作 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 的测试,根据下面的评论)。
编辑:配方还提供了使用颜色和重写部分行的功能。它还有一个现成的文本进度条。
【讨论】:
打印不带换行符的回车 (\r) 会将光标重置到行首,从而使下一次打印覆盖已打印的内容:
import time
import sys
for i in range(100):
print i,
sys.stdout.flush()
time.sleep(1)
print "\r",
这不会清除该行,因此如果您尝试使用此方法打印递减数字,您将看到以前打印的剩余文本。您可以通过用空格填充输出或在其他答案中使用一些控制代码来解决此问题。
【讨论】:
基于this answer,但没有终端控制器:
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 编辑器中运行此示例。
【讨论】:
使用blessings package - 清除屏幕(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
【讨论】: