zoukankan      html  css  js  c++  java
  • Python 上下文管理器:控制输出的结果能同时保存到文件中

    说明

    以下这个类print_and_save可以修饰你的函数或管理上下文,让你的函数或命令的输出结果在控制台输出的同时,还能存储为你指定的文件
    免去你是用写日志函数的必要

    优点:

    • 完全不需要修改代码对函数或语句直接装饰或通过上下文管理即可,见下面例子

    此内容为个人原创,转载请注明出处:

    import sys
    
    class print_and_save(object):
        def __init__(self, filepath):
            self.file = open(filepath, 'a')
            self.old = sys.stdout  # 将当前系统输出储存到临时变量
            sys.stdout = self
    
        def __enter__(self):
            pass
    
        def __call__(self,func):
            def wrapper(*args, **kwargs):
                frs = func(*args, **kwargs)
                self._exit()
                return frs
            return wrapper
    
        
        def write(self, message):
            self.old.write(message)
            self.file.write(message)
    
        def flush(self):
            self.old.flush()
            self.file.flush()
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            self._exit()
    
        def _exit(self):
            self.file.flush()
            self.file.close()
            sys.stdout = self.old
    

    方法1. 直接装饰print函数

    with print_and_save("a.txt"):  
        print("directed print")
    

    方法2. 装饰用户函数

    @print_and_save("a.txt")  
    def decorated_out():
        print("decorator print")
    
    decorated_out()
    

    方法3. 定义用户函数上下文方式

    def contextout(text):
        print("context function print is %s" % text)
    
    with print_and_save("a.txt"):  
        contextout("ok")
    

    结果

    # 控制台
    directed print
    decorator print
    context function print is ok
    
    # 文件a.txt内容
    directed print
    decorator print
    context function print is ok
    

    此内容为个人原创,转载请注明出处:
    https://blog.csdn.net/u011173298/article/details/88423504
    https://www.cnblogs.com/JohnRain/p/10089419.html

  • 相关阅读:
    单位根反演学习笔记
    省选模拟测试17
    省选模拟测试16
    省选模拟测试15
    省选模拟测试14
    省选模拟测试13
    P4491 [HAOI2018]染色
    省选模拟测试12
    P4389 付公主的背包
    洛谷P3403
  • 原文地址:https://www.cnblogs.com/JohnRain/p/10089419.html
Copyright © 2011-2022 走看看