说明
以下这个类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