如何在 Python 中将信息打印到 stderr 和 stdout
默认情况下,print()
函数打印到标准输出。 要打印到 stderr
,请在调用 print()
函数时将文件关键字参数设置为 sys.stderr
,例如 print("错误信息", file=sys.stderr)
。
import sys
# 👇️ prints to stderr
print("错误信息", file=sys.stderr)
# 👇️ prints to stdout
print('example')
print()
函数获取一个或多个对象并将它们打印到 sys.stdout。
stdout 用于 print()
函数的输出和 input()
的提示。
stderr 用于解释器的提示和错误消息。
默认情况下,file 关键字参数设置为 sys.stdout
的当前值。
如果我们运行代码片段,将看到两条消息都打印到我们的终端。 这是默认行为。
将 stdout 和 stderr 分开是很有用的,因为其中一个可以重定向到文件、缓冲区或 /dev/null,而另一个可以一直指向终端。
from io import StringIO
import sys
buffer = StringIO()
# 👇️ redirect sys.stdout (messages won't be shown to terminal)
sys.stdout = buffer
print('⛔️ This is NOT shown')
print('✅ This is shown', file=sys.stderr)
print()
函数的文件关键字参数默认为 sys.stdout
。
我们将 sys.stdout
重定向到内存缓冲区,因此当未指定 file 关键字参数时 print()
不会连接到终端。
但是,
sys.stderr
仍然指向终端,因此显示了第二个print()
类的消息。
我们通常需要做的是将 print()
函数的输出重定向到一个变量,同时仍然能够使用 sys.stderr
打印到终端。
from io import StringIO
import sys
# 👇️ redirect sys.stdout to buffer
buffer = StringIO()
sys.stdout = buffer
# 👇️ store output of print() in a variable
print('Store this in the variable below ✅')
print_output = buffer.getvalue()
print('Can still use stderr', file=sys.stderr) # 👉️ Can still use stderr
# 👇️ restore stdout to default for print (optional)
sys.stdout = sys.__stdout__
# 👇️ -> Store this in the variable below ✅
print('->', print_output)
io.StringIO
类返回一个内存缓冲区。
我们将 sys.stdout
重定向到缓冲区并使用 print()
函数打印一个值。
可以使用 getvalue()
方法访问该值。
该方法返回一个包含缓冲区全部内容的字节对象。
将值存储到变量中后,可以将 sys.stdout 属性恢复为默认值,这样就可以使用 print() 函数了。
即使
sys.stdout
被重定向,我们仍然可以使用print()
函数将文件关键字参数设置为sys.stderr
来打印到终端。
另一种可能更简洁的方法是使用日志记录模块记录到 sys.stderr
。
import logging
FORMAT = '%(message)s'
logging.basicConfig(format=FORMAT)
# 👇️ __name__ is module's name
logger = logging.getLogger(__name__)
logger.warning('prints to stderr ⛔️')
print('prints to stdout')
我们使用 logging.basicConfig
方法来初始化记录器的基本配置。
%(message)s
格式只是将消息包含在日志调用中。
logging.getLogger
方法返回具有指定名称的记录器。
__name__
全局变量存储模块的名称。
logger.warning()
方法默认打印到 sys.stderr,而 print()
函数默认打印到 sys.stdout。
这是因为默认情况下,basicConfig
方法的流关键字参数设置为 sys.stderr,而 print()
函数中的文件参数设置为 sys.stdout。
import sys
import logging
FORMAT = '%(message)s'
# 👇️ specified default value for stream
logging.basicConfig(stream=sys.stderr, format=FORMAT)
# 👇️ __name__ is module's name
logger = logging.getLogger(__name__)
logger.warning('prints to stderr')
# 👇️ specified default value for file
print('prints to stdout', file=sys.stdout)
相关文章
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。