首页 > 解决方案 > 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()

标签: pythonpython-3.xstdout

解决方案


您可以通过重新分配来恢复到原始流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) 

推荐阅读