如何在终端重写输出

时间:2010-08-15 18:36:18

标签: python linux terminal

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

4 个答案:

答案 0 :(得分:24)

在没有换行符的情况下打印回车符(\r)会将光标重置为该行的开头,使下一个打印件覆盖已打印的内容:

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

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

答案 1 :(得分:5)

这个食谱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进行测试,根据下面的评论)。

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

答案 2 :(得分:3)

使用blessings package - 清除屏幕(清除/ 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

答案 3 :(得分:0)

基于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编辑器中运行此示例。