k8s pod log日志不显示python print打印的内容

打印 上一主题 下一主题

主题 663|帖子 663|积分 1989

问题

Python 程序代码中使用 print() 打印的内容,在查询 k8s pod 日志时不显示。
原因

print() 函数

Python 的 print() 函数签名如下:
  1. print(*objects, sep=' ', end='\n', file=None, flush=False)
复制代码
摘录部分官方文档如下:
The file argument must be an object with a write(string) method; if it is not present or None, sys.stdout will be used. Since printed arguments are converted to text strings, print() cannot be used with binary mode file objects. For these, use file.write(...) instead.
由于没有显式地传递 file 参数,所以 Python 会默认使用 sys.stdout
sys.stdout

查阅官方文档,节选片段:
When interactive, the stdout stream is line-buffered. Otherwise, it is block-buffered like regular text files. The stderr stream is line-buffered in both cases. You can make both streams unbuffered by passing the -u command-line option or setting the PYTHONUNBUFFERED environment variable.
stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。
解决方案

解决方案在 envvar-PYTHONUNBUFFERED 中其实已经说明了,有两种:

  • 设置环境变量 PYTHONUNBUFFERED
  • 运行 python 程序时,使用 -u 命令选项
在 Dockerfile 中我们只需这样一行设置即可:
  1. ENV PYTHONUNBUFFERED=1
复制代码
参考



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表