python 的 print() 函数实际上调用的是 sys.stdout()
那么可以使用以下脚本将print()同时输出到控制台和文件中。注意,只有print()中的内容是str时,才有效。
import datetime
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--ppath', type=str, required=False, default=".", help="Data directory")
args = parser.parse_args()
def make_print_to_file(path='./'):
'''
path, it is a path for save your log about fuction print
example:
use make_print_to_file() and the all the information of funtion print , will be write in to a log file
:return:
'''
class Logger(object):
def __init__(self, filename="Default.log", path="./"):
self.terminal = sys.stdout
self.log = open(os.path.join(path, filename), "a", encoding='utf8', )
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
fileName = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
sys.stdout = Logger(fileName + '.log', path=path)
# print(fileName.center(60, '*'))
if not os.path.exists(f'{args.ppath}/logs/'):
os.makedirs(f'{args.ppath}/logs/')
make_print_to_file(path=f'{args.ppath}/logs/')