我一直在尝试使用以下代码打印出python2.7中for循环的进度:
for i in range(100):
if float(i) % 10.0 == 0:
print i, "r",
我追求的行为是在 std 上刷新同一行,而不是每次都写入新行。
编辑 1:
在我的控制台(Xfce 终端 0.4.8(中进行测试,无论我是否包含 if
语句,我实际上都不会得到任何输出。
为什么没有输出?
我最初说 stdout 的行为会根据 if 语句是否存在而改变,因为我将产生问题的代码简化为最简单的形式(只是为了产生上述效果(。我道歉。
编辑2:
感谢发件人,这解决了。如果您错过了sleep()
命令,打印和回车的速度如此之快,以至于您看不到它们。
编辑3:
最后一件事。如果您没有抓住 range(100)
中的最终数字,即 99,则该数字将从屏幕上清除。
编辑4:
请注意发件人答案中print i
后面的逗号。
我发现使用 sys.stdout
是一种更独立于系统的方法,因为 varions 的原因与 print
的工作方式有关。但是你必须显式flush
缓冲区,所以我把它放在一个函数中。
def carriage_return():
sys.stdout.write('r')
sys.stdout.flush()
这是一种摇摆不定。让我知道它是否有帮助。
我试过这个,它对我有用。time.sleep
只是为了戏剧化。
import sys, time
def carriage_return():
sys.stdout.write('r')
sys.stdout.flush()
for i in range(100):
if i % 10 == 0:
print i,
carriage_return()
time.sleep(1)
最后,我也看到人们这样做。像这样使用终端控制代码在某些方面似乎是正确的,但对我来说似乎也更脆弱。这也适用于上面的代码(在OS X上(。
def carriage_return():
if sys.platform.lower().startswith('win'):
print 'r'
else:
print chr(27) + '[A'
原样测试您的代码,只需在第一行末尾包含一个 :冒号:,就可以在 Py2.7 32 位、Windows7 64 位上正常工作。
您是否在if
或for
块中对 stdout 有任何可能导致写出换行符的输出?