当前位置: 移动技术网 > IT编程>脚本编程>Python > Python 上下文管理器:控制输出的结果能同时保存到文件中

Python 上下文管理器:控制输出的结果能同时保存到文件中

2018年12月09日  | 移动技术网IT编程  | 我要评论

湖北球迷论坛,东皇传说,两女1杯

说明

以下这个类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 __exit__(self, exc_type, exc_val, exc_tb):
        self._exit()

    def _exit(self):
        self.file.flush()
        self.file.close()
        sys.stdout = self.old

直接修饰语句

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

修饰函数中的控制台输出

def contextout(text):
    print("context function print is %s" % text)

with print_and_save("a.txt"):  
    contextout("ok")

以装饰器的方式修饰输出

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

decorated_out()

结果

# 控制台
directed print
context function print is ok
decorator print

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

此内容为个人原创,转载请注明出处:https://www.cnblogs.com/johnrain/p/10089419.html

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网