Python 将终端打印输出结果即时保存至 log文件
前言:
网上目前能搜到的都是,等整个程序跑完,才会在log文件中写东西,如果程序中间停止,就啥也没有了。
这明显不符合大家的需求,既然是要保存程序的打印信息,整个程序肯定是复杂,长时间,且容易报错的。
因此我想着加两个功能:
一个是随时打印,随时写到文档中;
一个是每次都在上一次程序执行结束之后,继续添加,而不是清空上次的文档。
代码:
import sys
class Logger(object):
def __init__(self, filename='default.log', add_flag=True, stream=sys.stdout):
self.terminal = stream
print("filename:", filename)
self.filename = filename
self.add_flag = add_flag
# self.log = open(filename, 'a+')
def write(self, message):
if self.add_flag:
with open(self.filename, 'a+') as log:
self.terminal.write(message)
log.write(message)
else:
with open(self.filename, 'w') as log:
self.terminal.write(message)
log.write(message)
def flush(self):
pass
def main():
sys.stdout = Logger("b.log", sys.stdout)
# sys.stderr = Logger("a.log", sys.stderr) # redirect std err, if necessary
# now it works
print('print something')
print("*" * 3)
# sys.stdout.write("???")
import time
time.sleep(10)
print("other things")
if __name__ == '__main__':
main()