我有一个长时间运行的脚本,它循环遍历数据库中的行。我经常会喜欢打印它处理了多少行,但每次都没有创建新行。这基本上就是我所拥有的:
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()
当我运行它时(在Python 2.7.5 64位,Windows上),我得到:
0 rows complete
10 rows complete
20 rows complete
...
100 rows complete
有谁能想到为什么回车不起作用?我在这里看到了一些关于Python和\r
的类似问题,但所有答案都说包括sys.stdout.flush()
,我有。{/ p>
答案 0 :(得分:5)
使用\r
可能是正确的方法,但行为在很大程度上取决于文本的输出方式。并非所有航站楼都会尊重光路回车:
cmd.exe
和powershell.exe
都应该按照您的预期输出文字(Powershell ISE不会,但这里是红鲱鱼)。
Python自己的idle
将忽略回车,所有输出都在一条长线上。
如您所知,您自己的编辑器命令窗口也会忽略\r
。
此外,如果您从交互式窗口尝试,您还会在每行的末尾输出一些数字:这是因为交互式窗口有助于将调用结果输出到sys.stdout.flush()
。