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

时间:2014-06-21 19:13:33

标签: python

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

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

打印'开始'测试,然后是一个无限序列的开始测试'线。但是,如果我移动'开始''消息,所以我有:

from time import sleep

def am_i_running():
    while True:
        sleep(0.5)
        print(".", end="")

if __name__ == '__main__':
    print('starting test')
    am_i_running()

这打印'开始测试'然后永远挂起 - 但只有当作为脚本运行时。如果我将模块导入空闲状态并调用' am_i_running()',它就可以了。另外,如果我省略了开始测试'完全输出,它也可以在命令行中正常工作。问题似乎与print语句的位置有关,而不是与time.sleep本身有关。

我猜这是一个功能,而不是一个bug;但我不理解它。希望这里有人可以启发我。

1 个答案:

答案 0 :(得分:2)

输出被缓冲,直到行结束才会显示。由于您的print(".", end="")最后没有包含换行符,因此它永远不会刷新缓冲区。这不是因为你在睡觉前有print;问题是,在第一个示例中,每次循环迭代都会打印换行符,但在第二个示例中,启动消息后不会打印换行符。

您可以看到有关此问题的其他问题。 This one给出了一个简单的答案:

import sys
sys.stdout.flush()