代码如下:
class info:
def __init__(self):
super().__init__()
# 打印
print('print info ')
import sys # 导入sys模块以操纵Python运行时环境
import os # 导入os模块以与操作系统交互
import datetime # 导入datetime模块以处理日期和时间
from infoclass import info # 从infoclass模块导入info类
class CapturingOutput:
"""
用于捕获程序标准输出(stdout)的类。
"""
def __init__(self):
"""
初始化CapturingOutput对象。
"""
self.buffer = [] # 初始化一个空列表以存储捕获的文本
def write(self, text):
"""
用于捕获写入stdout的文本并将其追加到缓冲区的方法。
参数:
text (str): 写入stdout的文本。
"""
self.buffer.append(text) # 将捕获的文本追加到缓冲区列表
def get_text(self):
"""
用于检索捕获的文本的方法。
返回:
str: 连接为单个字符串的捕获的文本。
"""
return ''.join(self.buffer) # 将捕获的文本列表连接为单个字符串
class LoggingOutput:
"""
用于管理将输出记录到文件的类。
"""
def __init__(self, log_file_name):
"""
初始化LoggingOutput对象。
参数:
log_file_name (str): 日志文件的名称。
"""
self.log_file_name = log_file_name # 分配日志文件名
self.captured_output = CapturingOutput() # 创建CapturingOutput的实例
self.original_stdout = sys.stdout # 存储原始的stdout
sys.stdout = self.captured_output # 将stdout重定向到CapturingOutput的实例
def save_log(self):
"""
将捕获的输出保存到日志文件并恢复原始stdout的方法。
返回:
str: 捕获的文本。
"""
sys.stdout = self.original_stdout # 恢复原始的stdout
current_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 获取当前日期和时间
captured_text = self.captured_output.get_text() # 获取捕获的文本
if not os.path.exists(self.log_file_name):
# 如果日志文件目录不存在,则创建它
os.mkdir(self.log_file_name)
# 创建日志文件的完整路径
filename = self.log_file_name + "\\" + current_time + ".txt"
with open(filename, 'a') as file:
file.write(captured_text) # 将捕获的文本写入日志文件
return captured_text # 返回捕获的文本
if __name__ == '__main__':
# 使用示例:
# 创建实例开始捕获打印输出
logging_output = LoggingOutput(log_file_name="yourFile")
#执行打印
print('开始')
info()
# 保存日志,日志以时间命名,保存在当前目录的yourFile文件夹
logging_output.save_log()
代码主要包括两个类,CapturingOutput的类能够捕获通过sys.stdout输出的文本,并将其保存到缓冲区中。LoggingOutput类使用CapturingOutput来捕获打印输出,并将其保存到指定的日志文件中。
通过在代码首尾使这些类,可捕获期间的打印输出,并保存到一个以时间命名的txt文本作为日志文件