我有一个长时间运行的脚本循环数据库中的行.我经常想要打印它处理的行数,但每次都不创建新行.这基本上就是我所拥有的:
import sys
mystr = "{} rows complete\r"
for i in range(0, 100):
if i % 10 == 0:
sys.stdout.write(mystr.format(i))
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
当我运行它(在Python 2.7.5 64位,Windows上)时,我得到:
0 rows complete
10 rows complete
20 rows complete
...
100 rows complete
Run Code Online (Sandbox Code Playgroud)
谁能想到为什么回车不起作用?我在这里看到了一些关于Python的类似问题\r,但所有的答案都说包含了sys.stdout.flush(),我有.
使用\r可能是正确的方法,但行为在很大程度上取决于文本的输出方式.并非所有航站楼都会尊重裸车回程:
cmd.exe并且powershell.exe应该按照您期望的方式输出文本(Powershell ISE没有,但这是一个红色的鲱鱼).
Python自己idle会忽略回车,所有输出都在一条长线上.
如您所述,您自己的编辑器命令窗口也会忽略\r.
此外,如果您从交互式窗口尝试,您还会在每行的末尾输出一些数字:这是因为交互式窗口有助于输出调用结果sys.stdout.flush().