Python print()设置end=''时无法实时刷新输出的解决方法
问题原因
Python标准输出默认采用行缓冲机制:只有输出内容遇到换行符、缓冲区占满、或者程序运行结束时,才会把缓冲区里的内容刷到屏幕上。当你给print()设置end=''取消了默认的末尾换行后,单次print的内容不会触发自动刷新,就会出现所有内容攒到最后一次性显示的问题。
修复方案
方案1:给print加flush参数(推荐,Python 3.3+支持)
直接在print()里传入flush=True,强制每次打印后立即刷新缓冲区,不需要额外导包,改造成本最低:
word_list = ['a', 'b', 'c'] for x in word_list: print(x, ',', end='', flush=True) # 执行其余耗时操作
注意:不要用list作为变量名,它是Python内置的列表类型,用作变量名会覆盖内置能力,容易引发异常。
方案2:手动调用标准输出刷新方法(兼容旧版本Python)
如果使用的Python版本低于3.3,不支持print的flush参数,可以导入sys模块,每次打印后手动调用sys.stdout.flush()完成刷新:
import sys word_list = ['a', 'b', 'c'] for x in word_list: print(x, ',', end='') sys.stdout.flush() # 执行其余耗时操作
方案3:启动脚本时关闭全局输出缓冲
如果整个脚本的所有输出都需要实时打印,不想逐次给print加参数,可以在运行Python脚本时添加-u参数,强制关闭标准输出、标准错误的缓冲,所有内容都会直接输出到屏幕:
python -u your_script_path.py
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

