Python while循环调用time.sleep无输出直到KeyboardInterrupt的问题
问题原因
这是Python默认的标准输出缓冲机制导致的:
当输出内容不包含换行符、且输出流未触发自动刷新条件时,Python会先把要打印的内容暂存在内存缓冲区中,不会立刻推送到屏幕显示。你的代码里print设置了end=" ",每次打印结束的字符是空格而非默认的换行符,循环里每次打印的内容都堆在缓冲区里没有被刷出,直到你按下Ctrl+C触发程序终止,系统才会强制清空缓冲区,所有攒住的内容才会一次性显示出来,和sleep函数、无限循环本身没有关系。
解决方法
你可以任选下面一种方案修复:
- 方案1:给
print函数增加flush=True参数,强制每次打印完成后立刻刷新缓冲区,修改后的代码如下:
from colorama import Back from time import sleep while True: print(Back.RED +'Lol' ,sep=" " ,end=" ", flush=True) sleep(0.2)
- 方案2:运行脚本时增加
-u启动参数,直接让Python运行全程关闭标准输出缓冲,不需要修改业务代码,启动命令参考:python -u colograma.py - 方案3:手动调用标准输出刷新方法,导入sys模块后,在每次print后执行
sys.stdout.flush(),效果和flush=True完全一致。
补充说明:你触发键盘中断后看到的连续"Lol"是缓冲区攒下的历史打印内容,后面跟着的KeyboardInterrupt报错是中断操作本身的正常提示,和输出延迟问题无关。
内容的提问来源于stack exchange,提问作者UserThatProgram'sHorribly
相关产品推荐
相关产品推荐

