Python回车不起作用

时间:2014-10-26 16:09:18

标签: python stdout

我有一个长时间运行的脚本,它循环遍历数据库中的行。我经常会喜欢打印它处理了多少行,但每次都没有创建新行。这基本上就是我所拥有的:

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>

1 个答案:

答案 0 :(得分:5)

使用\r可能是正确的方法,但行为在很大程度上取决于文本的输出方式。并非所有航站楼都会尊重光路回车:

cmd.exepowershell.exe都应该按照您的预期输出文字(Powershell ISE不会,但这里是红鲱鱼)。

Python自己的idle将忽略回车,所有输出都在一条长线上。

如您所知,您自己的编辑器命令窗口也会忽略\r

此外,如果您从交互式窗口尝试,您还会在每行的末尾输出一些数字:这是因为交互式窗口有助于将调用结果输出到sys.stdout.flush()