32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
import time
|
|
import functools
|
|
import traceback
|
|
from yaspin import yaspin
|
|
|
|
RESET = "\033[0m"
|
|
GREEN = "\033[32;1m"
|
|
YELLOW = "\033[33;4m"
|
|
|
|
def spinner_run(text='Processing...', hide=False):
|
|
def decorator(func):
|
|
@functools.wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
with yaspin(text=text, color="cyan") as spinner:
|
|
start = time.time()
|
|
try:
|
|
if hide: spinner.hide()
|
|
result = func(*args, **kwargs)
|
|
if hide: spinner.show()
|
|
except Exception as e:
|
|
spinner.fail("💥 Failed")
|
|
traceback.print_exc()
|
|
exit(1)
|
|
end = time.time()
|
|
during = f'[{end-start:05.2f} s]'.replace('[0', '[ ')
|
|
padding = ' ' * (64 - len(spinner.text) - len(result))
|
|
spinner.text = f'{spinner.text}{YELLOW}{result}{RESET}{padding}{GREEN}{during}{RESET}'
|
|
spinner.ok(f"✅ Done")
|
|
print(RESET, end='') # 确保颜色重置
|
|
return result
|
|
return wrapper
|
|
return decorator |