python - Python:将 sys.stdout 恢复为默认值
问题描述
我想将输出写入文件,因此我做到了
sys.stdout = open(outfile, 'w+')
但是后来我想在写入文件后打印回控制台
sys.stdout.close()
sys.stdout = None
我得到了
AttributeError: 'NoneType' object has no attribute 'write'
明明默认输出流是不行的None
,那我怎么对Python说:
sys.stdout = use_the_default_one()
解决方案
您可以通过重新分配来恢复到原始流sys.__stdout__
。
从文档
在程序开始时包含 [s] 标准输入、标准错误和标准输出的原始值。它们在最终确定期间使用,并且无论 sys.std* 对象是否已被重定向,都可以用于打印到实际的标准流。
可以使用redirect_stdout上下文管理器而不是手动重新分配:
import contextlib
with contextlib.redirect_stdout(myoutputfile):
print(output)
(有一个类似的redirect_stderr)
变化sys.stdout
具有全球影响。例如,这在多线程环境中可能是不希望的。它也可能被认为是简单脚本中的过度工程。一种本地化的替代方法是通过其关键字参数将输出流传递给打印:file
print(output, file=myoutputfile)
推荐阅读
- react-native - 渲染被多次调用并产生问题,因为我正在使用 expo-av 声音
- java - 在 Karaf 容器中,jar 文件的物理部署在哪里可用?
- grep - egrep 在结果中添加搜索模式
- gcc - cmake可以处理rc文件吗?
- javascript - 快速服务器的前端功能为空白
- tensorflow - tf.GradientTape() 仅返回无
- javascript - 如何从 HTML 表中仅访问整数值(仅限卷号)并将值存储在 JS 数组中
- python - 是否可以将 Selenium 屏幕截图保存到 PIL 图像对象?
- node.js - 更改不和谐机器人存在时用户未定义
- swift - 如何在 SwiftUI 上使完整按钮可点击