我的第一次,所以要温柔!
在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;但我不理解它。希望这里有人可以启发我。
答案 0 :(得分:2)
输出被缓冲,直到行结束才会显示。由于您的print(".", end="")
最后没有包含换行符,因此它永远不会刷新缓冲区。这不是因为你在睡觉前有print
;问题是,在第一个示例中,每次循环迭代都会打印换行符,但在第二个示例中,启动消息后不会打印换行符。
您可以看到有关此问题的其他问题。 This one给出了一个简单的答案:
import sys
sys.stdout.flush()