我想在Python脚本的末尾捕获控制台输出。也就是说,我想要正常打印到控制台,并在执行结束时将控制台输出保存到文件中。
我已经看到了各种相关的SO问题1,2,3,但它们只是重定向输出而不显示它或使用logging
。从我在阅读logging
doc时可以看出,您只能记录您编写的代码的输出。
上面所有链接的问题是来自您尚未编写的代码的控制台输出,这些代码也会打印到控制台。 我希望在执行结束时程序的整个控制台输出。
我的第一直觉是
logFile = open('LogFile.txt', 'w')
def print_log(msg):
print(msg)
logFile.write(msg)
print_log('Hello World!')
logFile.close()
但是这仍然无法从正在使用的其他代码和库中捕获控制台输出。 有没有办法在执行结束时保存python脚本的控制台输出?我觉得应该有一个简单的方法来做到这一点,但我所有的研究都没有找到合适的解决方案
答案 0 :(得分:1)
我在我的一个项目中使用了这个:
Tee
基本上它完全与Maksym Markov在评论中所说的有一点区别。我通常不想拖延任何输出,所以我写了这个sys.stdout
,它捕获stdout(或stderr)上的所有文本,立即打印出来并保存到缓冲区供以后使用。它还关注"修复"代码退出with
块时的if __name__ == "__main__":
with Tee() as tee:
print("Hello World!")
print(tee.read())
。
使用示例:
tee.read()
有一些缺点,例如没有额外的代码,你可以在with块中使用model
。但在我的情况下,我总是需要处理整个块的输出。