为什么这个计时器只打印最终结果而不是每秒更新?

时间:2016-11-03 14:29:35

标签: python terminal carriage-return

我不明白为什么这段代码的第二部分不是以1秒的步长打印一个数字,而是在脚本的末尾(在这种情况下,第二部分开始后3秒)代码)?

#!/usr/bin/python2.7

import time

x       =   0
maxi    =   999999 #I chose a big number to show them scroll

#this part will print all the number on the same line
while x <= maxi:
    print '<{}>\r'.format(x),
    x+=1
print

#this part will print the numbers with a sleep of 1 second for each print
x       =   999998 #I initialized it at this number to only wait 3 seconds
while x <= maxi:
    print '<{}>\r'.format(x),
    x+=1
    time.sleep(1)
print

1 个答案:

答案 0 :(得分:3)

这可能是因为缓冲。 您可以尝试在命令行上使用python -u运行程序,如手册页所示

  

-u强制stdin,stdout和stderr完全无缓冲。 [...]

或者您可以使用import sys并在sys.stdout.flush()之后加print()

如果您想知道为什么第二次打印而不是第一次打印需要,那么很可能是因为sleep。它会阻止执行,因此不会更新/刷新任何内容。我认为它实际上也发生在第一个,但更新更快/更快,所以你没有注意到它。