Python如何在运行完程序之后,在最后获取本程序运行输出的打印内容(包括tdqm的进度条输出内容)并写入文件呢?
程序代码:
import datetime
import os
import sys
import time
from tqdm import tqdm
if __name__ == '__main__':
#############################################################
# 这里输出之后的所有的输出的print 内容即将写入日志
#############################################################
sum = 0
data = [1,2,3,4,5,6,7,9]
for i in tqdm(data):
tmp = 0
try:
tmp = sum+1 / i
except:
tmp = 0
sum += tmp
print(sum)
print(666)
100%|██████████| 8/8 [00:00<?, ?it/s]
177.33015873015873
666
进程已结束,退出代码0
比如上面这个程序在输出之后,在“进程已结束,退出代码0”之前获取之前的所有打印输出内容(包括进度条)并把它写入txt文件,如下图。
txt文件的内容:
100%|██████████| 8/8 [00:00<?, ?it/s]
177.33015873015873
666
已解决。
解决方法如下:
class Logger(object):
def __init__(self, filename='default.log', stream=sys.stdout):
self.terminal = stream
self.log = open(filename,encoding="utf-8", mode='a')
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger(os.path.join(output_path, "第{}批数据日志.log".format(n)), sys.stdout)
sys.stderr = Logger(os.path.join(output_path, "第{}批数据日志.log".format(n)), sys.stderr)
望采纳
可以使用 Python 的 sys.stdout 模块来获取程序的输出并将其写入文件。
下面是一个示例代码,它会将程序的输出保存到文件 output.txt 中:(注意,原本这个print是直接输出到标准输出的,现在通过这个方式可以写到文件了,也就是说,你现在在标准输出看到的都可以写到文件中。替换掉我print的那几行为你原来的运行代码,进度输出之类的就行)
import sys
# 保存原来的标准输出流
original_stdout = sys.stdout
# 创建一个文件,用于保存程序的输出
with open('output.txt', 'w') as f:
# 将标准输出流替换成文件
sys.stdout = f
# 这里是你的代码,所有的输出都会写入文件
print(100%|██████████| 8/8 [00:00<?, ?it/s])
print(177.33015873015873)
print(666)
# 恢复标准输出流
sys.stdout = original_stdout
# 在文件末尾添加一行
with open('output.txt', 'a') as f:
f.write('进程已结束,退出代码0\n')