gunicorn运行的python程序日志不能实时打印print

ZhangJian 2023-08-20 n次浏览 Python 编辑

使用supervisor运行网站,调试print无法显示,发现重启程序之后日志才有

原来python解释器中,print是stdout输出, stdout输出流默认是行缓存的 ( line-buffered ),重定向和输出到控制台的内容会先被存在缓冲区中暂存,遇到换行符“\n”,或者缓存区的数据满 4k,才会将内容写到重定向的文件或者控制台中去。stderr不会先输出到缓冲区,所以才看到没有及时日志的原因而错误日志能实时输出

方法

print ("print")
import sys
sys.stdout.flush()

方法二

print("print",flush=true)