迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

如何在 Python 中将信息打印到 stderr 和 stdout

作者:迹忆客 最近更新:2022/11/08 浏览次数:

默认情况下,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 的当前值。

如果我们运行代码片段,将看到两条消息都打印到我们的终端。 这是默认行为。

Python 中将信息打印到 stderr 和 stdout

stdoutstderr 分开是很有用的,因为其中一个可以重定向到文件、缓冲区或 /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)

Python 中将信息重定向

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)

python 将 print 输出重定向到一个变量

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')

python 使用日志记录模块记录到 sys stderr

我们使用 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)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

C 语言中打印到 stderr

发布时间:2023/05/07 浏览次数:63 分类:C语言

本文介绍了如何在 C 语言中打印到 stderr 的方法。在 C 语言中使用 fprintf 函数打印到 stderr

在 C 语言刷新 stdout 输出流

发布时间:2023/05/07 浏览次数:71 分类:C语言

本文介绍了如何在 C 语言中刷新 strdout 输出流。在 C 语言中使用 fflush 函数来刷新 stdout 输出流

在 Bash 中将 Stderr 和 Stdout 重定向到一个文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍了如何在 Bash 中重定向 stderr 和 stdout。让我们开始了解 Linux 中的标准输出和标准错误这两个术语。Linux 中的标准输出和标准错误 在 Linux 中,命令从用户那里获取一些输入,可以是文件

Python for 循环中的下一项

发布时间:2023/04/26 浏览次数:179 分类:Python

本文讨论了 Python 中的 for 循环以及如何通过使用 for 循环和示例来跳过列表的第一个元素。

Python While 循环用户输入

发布时间:2023/04/26 浏览次数:148 分类:Python

我们可以在 while 循环中使用 input() 函数来输入数据,直到在 Python 中满足某个条件。

Python 中的整数规划

发布时间:2023/04/26 浏览次数:193 分类:Python

本文介绍了整数规划和可用于解决混合整数规划问题的 Python 工具。

在 Python 中将整数转换为罗马数字

发布时间:2023/04/26 浏览次数:87 分类:Python

本篇文章将介绍在 Python 中将整数转换为罗马数字。以下是一个 Python 程序的实现,它将给定的整数转换为其等效的罗马数字。

在 Python 中将罗马数字转换为整数

发布时间:2023/04/26 浏览次数:144 分类:Python

本文讨论如何在 Python 中将罗马数字转换为整数。 我们将使用 Python if 语句来执行此操作。 我们还将探讨在 Python 中将罗马数字更改为整数的更多方法。

在 Python 中读取 gzip 文件

发布时间:2023/04/26 浏览次数:70 分类:Python

本篇文章强调了压缩文件的重要性,并演示了如何在 Python 中使用 gzip 进行压缩和解压缩。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便