Python 3.4:time.sleep()在打印调用之前挂起

我的第一次,所以要温柔!

在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()
点赞