Python 中如何把输出打印到标准错误(stderr)?

Python 输出到 stderr:print(..., file=sys.stderr) 最简洁,sys.stderr.write() 更底层。logging 默认就输出到 stderr。本文介绍各种方式。

最佳实践
Python 中如何把输出打印到标准错误(stderr)?封面

最简单:print("错误信息", file=sys.stderr)。logging 模块的默认行为也是输出到 stderr。

print 到 stderr

import sys

print("这是一条错误信息", file=sys.stderr)

file 参数指定输出目标,默认是 sys.stdout

sys.stderr.write()

import sys

sys.stderr.write("这是一条错误信息\n")

更底层的方式。注意 write() 不会自动加换行,需要手动加 \n

logging(推荐)

logging 默认输出到 stderr,带格式和级别:

import logging

logging.basicConfig(level=logging.WARNING)
logging.error("这是一条错误信息")

什么时候用 stderr?

  • 错误信息、警告:正常输出走 stdout,错误走 stderr,方便分开重定向;
  • 管道脚本python script.py | grep pattern 时,stderr 不会被管道捕获,错误信息直接显示在终端。
# 只把错误信息写入日志文件
python script.py 2> error.log

# stdout 写文件,stderr 显示在终端
python script.py > output.log

观测云对照

容器环境中,stdout 和 stderr 都会被 Docker 的日志驱动收集,观测云 DataKit 采集容器日志时两者都会收到。不需要刻意区分,但良好的习惯是正常日志走 stdout、错误走 stderr。

常见问题(FAQ)

Q:stdout 和 stderr 在终端上看起来有区别吗?
A:默认都显示在终端上,看起来一样。区别在于重定向时:> 只重定向 stdout,2> 重定向 stderr。

Q:print 到 stderr 会影响性能吗?
A:不会,和 print 到 stdout 性能一样。

Q:Jupyter Notebook 中 stderr 输出在哪?
A:在 cell 输出区域中以红色背景显示。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台