Python 上下文管理器:控制输出的结果能同时保存到文件中
程序员文章站
2023-11-10 22:04:10
说明 以下这个类 可以修饰你的函数,让你的函数或命令的输出结果在控制台输出的同时,还能存储为你指定的文件 免去你是用写日志函数的必要 优点: 完全不需要修改代码对函数或语句直接装饰就行 直接修饰语句 修饰函数中的控制台输出 以装饰器的方式修饰输出 结果 此内容为个人原创,转载请注明出处:https: ......
说明
以下这个类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