在控制台正确打印 \r
当我写一个脚本来更新打印的内容,比如这样:
for i in range(101):
print(str(i) + "% \r", end="")
然后在终端(Ubuntu)中运行这个脚本时,我得到了正确的输出,更新了那一行:
100%
但是,在Eclipse的Pydev中,控制台却这样显示:
0%
1%
2%
...
100%
有人知道怎么解决这个问题吗?提前谢谢!
2 个回答
3
这是因为每次使用 'print' 时,无论你是否使用 \r,它总是会生成一个新行。你可以试试用 sys.stdout 来代替:
import time, sys
for i in range(101):
sys.stdout.write(str(i) + "% \r")
sys.stdout.flush()
time.sleep(.3)
0
这看起来是个老问题,叫做CR LF问题。根据你使用的操作系统和控制台,CR和LF作为换行符的处理方式会有所不同。
有些系统需要用CRLF作为行结束符。 有些系统只需要LF,但会隐式地处理CR。 还有一些系统(比如你用的这个)在每个CR之前会隐式地加上LF,虽然这是我第一次见到这种情况。
也许你可以调整一下PyDev控制台的换行设置。
补充一下:你也可以使用ANSI转义码来移动光标,比如用CSInD向左移动n个字符,或者用CSInC向右移动n个字符。