2014-10-26 330 views
2

我有一个长时间运行的脚本,循环遍历数据库中的行。我经常想要打印它处理的行数,但不会每次都创建一个新行。实际上,这就是我:Python回车不起作用

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 

谁能想到,为什么回车ISN”的工作?我在这里看到了一些关于Python和\r的类似问题,但是所有的答案都表示包含sys.stdout.flush(),这是我的。

+0

这是在Windows上执行吗? – 2014-10-26 16:11:45

+0

是的,它在Windows上。 – Rob 2014-10-26 16:16:27

+0

适用于Python 2.7.7和3.3(尽管调用'time.sleep()'有助于查看更早的行,区别在于我运行的是32位版本或0.0.2版本差异,或者可能是你如何运行它:你如何运行脚本?我尝试了两个从PowerShell和从cmd.exe,它适用于我的任何方式 – Duncan 2014-10-26 16:47:16

回答

5

使用\r可能是正确的方法,但行为很大程度上取决于文本的输出方式。不是所有的终端都会遵循一个单独的回车:

cmd.exepowershell.exe应该都按照您期望的方式输出文本(Powershell ISE不会,但这里是一个红鲱鱼)。

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

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

另外,如果您从交互式窗口中尝试,您还可以在每行的末尾获得一些数字输出:这是因为交互式窗口可以将呼叫的结果有用地输出到sys.stdout.flush()