deftimer_unit(s):'''将 second 秒转为适合的单位 '''if s <=1:returnf'{round(s, 1)}s' num, unit = [ (i, u) for i, u in ((s /60**i, u) for i, u inenumerate('smhd')) if i >=1 ][-1]returnf'{round(num, 1)}{unit}'
from colorama import Fore, Style
def put_color(string, color, bold=False):
'''
give me some color to see :P
'''
if color == 'gray':
COLOR = Style.DIM + Fore.WHITE
else:
COLOR = getattr(Fore, color.upper(), "WHITE")
return f'{Style.BRIGHT if bold else ""}{COLOR}{str(string)}{Style.RESET_ALL}'
import sys
class Logger:
def __init__(self, filename, stdout=False, verb=2):
self.stdout = stdout
self.verbose = verb
self.filename = filename
def _log(self, log_content):
if self.stdout:
sys.stderr.write('\r'+log_content)
else:
with open(self.filename, 'a') as fp:
fp.write(log_content)
def log(self, event, level='INFO', return_str=False):
'''记录日志
@event: 具体事件
@filename: 日志文件
@level: 事件等级
'''
levels = {
'DEBU': 'gray',
'INFO': 'white',
'WARN': 'yellow',
'ERRO': 'red'
}
color = levels.get(level, 'white')
clevel = put_color(level, color, True)
log_time = put_color(get_now(), 'cyan', True)
log_filename = put_color(self.filename.split('/')[-1], 'gray', True)
cevent = put_color(event, color) if color != 'white' else event
log_content = f'[{log_time}] [{clevel}] {cevent}'
if self.verbose == 3:
log_content = f'[{log_time}] [{clevel}] [{log_filename}] {cevent}'
if not event.endswith('\n'): # 保证结尾换行
log_content += '\n'
if self.verbose == 0:
pass
elif self.verbose == 1 and level == 'ERRO':
self._log(log_content)
elif self.verbose == 2 and level != 'DEBU':
self._log(log_content)
elif self.verbose == 3:
self._log(log_content)
if return_str:
return '\r'+log_content.strip()