Bash或Python,当将字符打印到终端时,如何在FIXED位置更改字符?

les*_*lie 2 python bash

我想在这里知道的事情应该是"基本的",但这是我脑海中长期存在的一个问题,不知道诀窍在哪里.

让我们说一个耗时的程序(无论是bash或者Python),我必须在运行时打印出进度的百分比,基本上我想打印1%,经过一段时间后,我打印2%等等.我想'2%'成为显示在显示的同一位置'1%',而不是像"1%2%"或其他什么.你知道wget,我想要的正是wget的作用,以显示下载进度的进度.我是否需要清除以前打印的角色,但如何?

它基本上是如何工作的......

谢谢,

Die*_*Epp 6

我将用Python回答,因为它更容易.

您可以将退格打印到终端以将光标向左移动,然后写入另一个字符以覆盖当前位置.您还可以使用回车符号前往该行的开头.

import time
import sys
for x in range(101):
    sys.stdout.write('\r%d%%' % x)
    sys.stdout.flush()
    time.sleep(0.2)
sys.stdout.write('\n')
Run Code Online (Sandbox Code Playgroud)

使用回车并重写整行是最简单的,因为您不必小心要打印多少退格.

请注意,如果新行比旧行短,则旧行仍将显示.

import sys
sys.stdout.write('this is a very long line')
sys.stdout.write('\rshort line')
sys.stdout.write('\n')
Run Code Online (Sandbox Code Playgroud)

输出:

short linevery long line

典型的解决方案是在长线上写入空格.