📅  最后修改于: 2023-12-03 15:09:32.611000             🧑  作者: Mango
在编写 Python 脚本时,有时候需要将程序的输出信息保存到文件中,以便日后查看或分析。Python 提供了一种简单的方法来实现输出消息的重定向,可以将标准输出(stdout)或标准错误输出(stderr)重定向到文件中。本文将介绍如何在 Python 中将输出重定向到文件。
在 Python 中,使用 sys.stdout
可以访问标准输出流。我们可以将 sys.stdout
重定向到一个文件中,例如:
import sys
sys.stdout = open('output.txt', 'w')
print('hello world')
上面的代码将标准输出流重定向到文件 output.txt
中。'w'
参数表示写入模式,将覆盖原有文件内容。
执行该脚本后,hello world
将被写入 output.txt
文件中。然后通过如下方式恢复标准输出:
sys.stdout.close()
sys.stdout = sys.__stdout__
其中 sys.__stdout__
是 Python 的内置变量,保存着原来的标准输出流。
将标准错误输出重定向到文件也类似于将标准输出重定向到文件,只是要使用 sys.stderr
来访问标准错误输出流。例如:
import sys
sys.stderr = open('error.txt', 'w')
print('this is an error message', file=sys.stderr)
这段代码将标准错误输出流重定向到 error.txt
文件中。
同样需要恢复标准错误输出流,只需执行以下代码:
sys.stderr.close()
sys.stderr = sys.__stderr__
有时候我们需要将输出同时重定向到文件和控制台。以下展示了如何实现:
import sys
class Logger:
def __init__(self, filename):
self.terminal = sys.stdout
self.log = open(filename, "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger("output.log")
以上代码创建了一个名为 Logger
的类,其中包含一个 write
函数,这个函数可以将输出写入日志和终端。
我们可以像下面这样使用 Logger
类:
print("hello world")
# 输出:hello world
sys.stdout = Logger("output.log")
print("hello world")
# 输出:hello world
with open("output.log", 'r') as f:
print(f.read())
# 输出:hello world
在输出 hello world
的同时,Logger
会将这个消息重定向到一个名为 output.log
的文件中,并在控制台打印。
本文介绍了如何在 Python 中将输出重定向到文件、恢复标准输出和标准错误输出以及如何将输出同时重定向到文件和终端。这些都是非常有用的功能,可以让我们更方便地进行日常工作和调试。