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

时间:2019-05-23 16:33:08

标签: python

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

我的代码:

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

我的程序很大,没有指向此处进行复制粘贴的提示,因为它不会影响我的问题。

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

反正还有什么可以克服的?

2 个答案:

答案 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以及您选择的文件中。

  1. 创建一个日志记录类,而不是使用print()来打印输出。修改您的日志记录类以写入sys.stdout和您的日志文件,具体取决于配置。另请参阅logging文档。

  2. 更高级,更hacky:创建您自己的文件实现,其行为类似于“ tee”程序,并将其write()等调用转发给两个基础文件:sys.stdout和您的日志文件。 / p>