我的第一次,所以要温柔!
在Win 7上使用Python 3.4,我注意到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 test’行.但是,如果我移动’开始’消息,我有:
from time import sleep
def am_i_running():
while True:
sleep(0.5)
print(".", end="")
if __name__ == '__main__':
print('starting test')
am_i_running()
这打印’开始测试’,然后永久挂起 – 但仅在作为脚本运行时.如果我将模块导入Idle并调用’am_i_running()’,它就可以了.此外,如果我完全省略’开始测试’输出,它也可以在命令行中正常工作.问题似乎与print语句的位置有关,而不是与time.sleep本身有关.
我猜这是一个功能,而不是一个bug;但我不理解它.希望这里有人可以启发我.
最佳答案 输出被缓冲,直到行结束才会显示.由于您的print(“.”,end =“”)在结尾处不包含换行符,因此它永远不会刷新缓冲区.这不是因为你在睡觉前有印刷品;问题在于,在第一个示例中,每次循环迭代都会打印换行符,但在第二个示例中,启动消息后不会打印换行符.
您可以看到有关此问题的其他问题. This one给出了一个简单的答案:
import sys
sys.stdout.flush()