我一直在尝试使用以下代码打印python2.7中for循环的进度:
for i in range(100):
if float(i) % 10.0 == 0:
print i, "\r",
我所追求的行为是在std-out上刷新同一行,而不是每次都写一行新的行。在
编辑1:
在我的控制台(Xfce终端0.4.8)中进行测试时,实际上无论是否包含if
语句,我都没有得到任何输出。在
为什么没有输出?
我最初说stdout的行为取决于if语句是否存在,因为我将产生问题的代码简化为最简单的形式(只为了产生上述效果)。我很抱歉。在
编辑2:
多亏了senderle,这个问题就解决了。如果您错过了sleep()
命令,那么打印和回车会很快发生,您看不到它们。在
编辑3:
最后一件事。如果您没有捕捉到range(100)
中的最后一个数字,即99,那么这个数字将从屏幕上清除。在
编辑4:
注意senderle答案中print i
后的逗号。在
我发现使用
sys.stdout
是一种更独立于系统的方式来实现这一点,原因与print
的工作方式有关。但是您必须显式地flush
缓冲区,所以我把它放在一个函数中。在这算是一个玩笑。如果有帮助请告诉我。在
我试过了,对我有用。这个
^{pr2}$time.sleep
只是为了戏剧化。在最后,我看到人们也这样做。使用这样的终端控制代码在某些方面似乎是正确的,但对我来说,它似乎更脆弱。对于我来说,上面的代码同样适用(在OSX上)。在
按原样测试代码,并在第一行末尾包含一个:冒号:,对于32位的Py2.7和64位的Windows7,都能正常工作。在
在您的
if
或for
块中是否有可能导致新行被写出的输出写入?在相关问题 更多 >
编程相关推荐