util.py
2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# -*- coding: utf-8 -*-
"""
AIfeng/2025-01-27
工具函数模块
提供日志、打印等基础功能
"""
import time
import datetime
from typing import Any
def printInfo(level: int, username: str, message: str):
"""打印信息
Args:
level: 日志级别 (0-DEBUG, 1-INFO, 2-WARN, 3-ERROR)
username: 用户名
message: 消息内容
"""
level_names = ['DEBUG', 'INFO', 'WARN', 'ERROR']
level_name = level_names[min(level, 3)]
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"[{timestamp}] [{level_name}] [{username}] {message}")
def log(level: int, message: str):
"""记录日志
Args:
level: 日志级别
message: 日志消息
"""
printInfo(level, 'SYSTEM', message)
def get_timestamp() -> str:
"""获取当前时间戳字符串"""
return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def format_duration(seconds: float) -> str:
"""格式化时长
Args:
seconds: 秒数
Returns:
格式化的时长字符串
"""
if seconds < 60:
return f"{seconds:.2f}秒"
elif seconds < 3600:
minutes = int(seconds // 60)
secs = seconds % 60
return f"{minutes}分{secs:.1f}秒"
else:
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = seconds % 60
return f"{hours}时{minutes}分{secs:.1f}秒"
def safe_print(obj: Any, prefix: str = ""):
"""安全打印对象,避免编码错误
Args:
obj: 要打印的对象
prefix: 前缀字符串
"""
try:
print(f"{prefix}{obj}")
except UnicodeEncodeError:
print(f"{prefix}{repr(obj)}")
except Exception as e:
print(f"{prefix}[打印错误: {e}]")
class Timer:
"""简单的计时器类"""
def __init__(self):
self.start_time = None
self.end_time = None
def start(self):
"""开始计时"""
self.start_time = time.time()
return self
def stop(self):
"""停止计时"""
self.end_time = time.time()
return self
def elapsed(self) -> float:
"""获取经过的时间(秒)"""
if self.start_time is None:
return 0.0
end = self.end_time if self.end_time else time.time()
return end - self.start_time
def elapsed_str(self) -> str:
"""获取格式化的经过时间"""
return format_duration(self.elapsed())
def __enter__(self):
return self.start()
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop()