使用python捕获print()输出,并生成txt文本

代码如下:

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文本作为日志文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值