使用sys.stdout保存输出,但我想在控制台/终端上显示它



因此,对于分析,我想保存脚本在控制台/终端上输出的所有内容,为此我使用了 sys.stdout

我的代码:

sys.stdout = open('logFile.dat', 'w')
# TOO MUCH LINES OF CODE
sys.stdout.close()

我的程序很大,在这里没有任何重复的内容,因为它不会影响我的问题。

所以我得到了我想要的东西,但是另一方面,程序在程序运行时是空白的,这对我来说是一个问题,因为我想让程序在控制台上输出东西。

无论如何是否可以克服这个?

将sys.stdout更改为自定义流(文件(有点极端。几个选择:1.在命令行上进行重定向。如果使用Bash(Linux/Mac/等(,则可以将输出输送到" TEE"程序,例如

python my_program.py | tee logfile.txt

Tee是一个简单的程序,可以采用其输入(Stdin(,并将其写入Stdout以及您选择的文件。

  1. 而不是使用print((,而是创建一个记录类并使用它来打印输出。根据配置,修改记录类以写入sys.stdout和日志文件。另请参阅记录文档。

  2. 更高级和更骇客:创建自己的文件实现,其作用像" TEE"程序,并将其写入((等转发到两个基础文件:sys.s.stdout:sys.stdout和您的文件。<<<<<<<<<<<<<<<<<<<<<<

如果我是您,我会使用常规stdout和 tee

假设您有代码:simple.py

print("Hello")

您可以像这样运行

> python ./simple.py  | tee output.log
Hello
> cat output.log
Hello

,您都有 - 在控制台和日志文件上的消息。

基于logger的方法

这并不是您要寻找的内容,但是您仍然可以运行它,因此您将同时获得结果:控制台和文件

import logging
logger = logging.getLogger('simple')
logger.setLevel(logging.INFO)
std_out = logging.StreamHandler()
file_out = logging.FileHandler('file.log')
logger.addHandler(std_out)
logger.addHandler(file_out)
logger.info('Hello from code')

您将遵循

> python ./simple.py
Hello from code
> cat file.log
Hello from code

最新更新