因此,为了进行分析,我想将脚本输出的所有内容保存在控制台/终端上,为此,我使用了sys.stdout
:
我的代码:
sys.stdout = open('logFile.dat', 'w')
# TOO MUCH LINES OF CODE
sys.stdout.close()
我的程序很大,没有指向此处进行复制粘贴的提示,因为它不会影响我的问题。
因此,我得到了想要的东西,但是另一方面,在程序运行时控制台为空白,这对我来说是个问题,因为我希望程序在控制台上输出内容。
反正还有什么可以克服的?
答案 0 :(得分:0)
如果我是你,我会使用常规的stdout和tee
假设您有代码:simple.py
print("Hello")
您可以像这样运行它
> python ./simple.py | tee output.log
Hello
> cat output.log
Hello
同时拥有-控制台上的消息和日志文件。
基于记录器的方法
这并不是您想要的,但是您仍然可以通过以下方式运行它:在控制台和文件中都可以得到结果
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
答案 1 :(得分:0)
将sys.stdout更改为自定义流(文件)有点极端。有两个选择: 1.在命令行上进行重定向。如果您使用的是bash(linux / mac / etc),则可以将输出通过管道传输到“ tee”程序,例如
python my_program.py | tee logfile.txt
tee是一个简单的程序,将其输入(stdin)写入到stdout以及您选择的文件中。
创建一个日志记录类,而不是使用print()来打印输出。修改您的日志记录类以写入sys.stdout和您的日志文件,具体取决于配置。另请参阅logging文档。
更高级,更hacky:创建您自己的文件实现,其行为类似于“ tee”程序,并将其write()等调用转发给两个基础文件:sys.stdout和您的日志文件。 / p>