Sar*_*ran 7 python stdout python-3.x
我想将输出写入文件,因此我做到了
sys.stdout = open(outfile, 'w+')
Run Code Online (Sandbox Code Playgroud)
但是后来我想在写入文件后打印回控制台
sys.stdout.close()
sys.stdout = None
Run Code Online (Sandbox Code Playgroud)
我得到了
AttributeError: 'NoneType' object has no attribute 'write'
Run Code Online (Sandbox Code Playgroud)
显然默认输出流不能是None,那么我该怎么对 Python 说:
sys.stdout = use_the_default_one()
Run Code Online (Sandbox Code Playgroud)
您可以通过重新分配到 来恢复到原始流sys.__stdout__。
从文档
在程序开始时包含 [s] 标准输入、标准错误和标准输出的原始值。它们在完成期间使用,无论 sys.std* 对象是否已重定向,都可以用于打印到实际的标准流。
所述redirect_stdout上下文管理器可以被用来代替手动重新分配:
import contextlib
with contextlib.redirect_stdout(myoutputfile):
print(output)
Run Code Online (Sandbox Code Playgroud)
(有一个类似的redirect_stderr)
变化sys.stdout具有全球影响。例如,这在多线程环境中可能是不可取的。它也可能被认为是简单脚本中的过度设计。一种本地化的替代方法是通过其关键字参数将输出流传递给打印file:
print(output, file=myoutputfile)
Run Code Online (Sandbox Code Playgroud)
在 Python3 中使用redirect_stdout;以类似的情况为例:
要将 help() 的输出发送到磁盘上的文件,请将输出重定向到常规文件:
with open('help.txt', 'w') as f:
with redirect_stdout(f):
help(pow)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |