因此,对于分析,我想保存脚本在控制台/终端上输出的所有内容,为此我使用了 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以及您选择的文件。
-
而不是使用print((,而是创建一个记录类并使用它来打印输出。根据配置,修改记录类以写入sys.stdout和日志文件。另请参阅记录文档。
-
更高级和更骇客:创建自己的文件实现,其作用像" 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