說明 以下這個類 可以修飾你的函數,讓你的函數或命令的輸出結果在控制台輸出的同時,還能存儲為你指定的文件 免去你是用寫日誌函數的必要 優點: 完全不需要修改代碼對函數或語句直接裝飾就行 直接修飾語句 修飾函數中的控制台輸出 以裝飾器的方式修飾輸出 結果 此內容為個人原創,轉載請註明出處: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