Python 3.4:调用print后time.sleep()意外挂起
这是我第一次发帖,请大家轻点!
我在使用Python 3.4,操作系统是Win 7时,发现time.sleep()有时候会意外地卡住。我搜索了一下,但找到的问题都没有解决我的困惑。以下这段代码运行得很正常:
from time import sleep
def am_i_running():
while True:
print('starting test')
sleep(0.5)
print(".", end="")
if __name__ == '__main__':
am_i_running()
它会先打印出'starting'测试,然后不断输出'.starting test'的行。但是如果我把'starting'这个消息的位置移动成这样:
from time import sleep
def am_i_running():
while True:
sleep(0.5)
print(".", end="")
if __name__ == '__main__':
print('starting test')
am_i_running()
这段代码会打印出'starting test',然后就一直卡在那儿——但只有在作为脚本运行的时候才会这样。如果我把这个模块导入到Idle里并调用'am_i_running()',它就能正常工作。而且,如果我完全不输出'starting test',从命令行运行也没问题。看起来问题出在print语句的位置,而不是time.sleep()本身。
我猜这可能是个特性,而不是个bug;但我不太明白。希望这里有人能给我解释一下。
1 个回答
2
输出是被缓冲的,直到行结束时才会显示。因为你的 print(".", end="")
语句后面没有换行符,所以它的缓冲区一直没有被清空。问题不在于你在睡眠前有一个 print
,而是因为在你的第一个例子中,每次循环都会打印一个换行符,而在第二个例子中,启动信息后面没有打印换行符。
你可以看到其他关于这个问题的讨论。这个链接 提供了一个简单的答案:
import sys
sys.stdout.flush()