如何在终端重写输出

jar*_*kam 20 python linux terminal

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

Ben*_*end 24

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

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

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

  • @klez:可能不适合所有终端.它适用于打字机.这个平台是否足够独立?:) (10认同)
  • 这个平台是独立的吗? (3认同)
  • 在我可以使用的两个平台上(Linux和Windows),它可以工作. (2认同)

Muh*_*uri 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)
Run Code Online (Sandbox Code Playgroud)

该配方用于terminfo获取有关终端的信息,并适用于许多终端的Linux和OS X. 但它在Windows上不起作用.(感谢piquadrat进行测试,根据下面的评论).

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

  • 根据要求,我在Windows(Windows 7,Python 2.7)上尝试了您的代码.输出为"0 1 2 3 4 5 6 7 8 9". (3认同)