📜  将 Python 脚本输出重定向到文件 - Python (1)

📅  最后修改于: 2023-12-03 15:09:32.611000             🧑  作者: Mango

将 Python 脚本输出重定向到文件 - Python

在编写 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 中将输出重定向到文件、恢复标准输出和标准错误输出以及如何将输出同时重定向到文件和终端。这些都是非常有用的功能,可以让我们更方便地进行日常工作和调试。