113 lines
3.5 KiB
Python
113 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
启动脚本示例
|
|
演示如何使用带日志记录的多进程录音系统
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import argparse
|
|
from datetime import datetime
|
|
|
|
def ensure_logs_directory():
|
|
"""确保日志目录存在"""
|
|
log_dir = "logs"
|
|
if not os.path.exists(log_dir):
|
|
os.makedirs(log_dir)
|
|
print(f"✅ 创建日志目录: {log_dir}")
|
|
return log_dir
|
|
|
|
def cleanup_old_logs(log_dir="logs", max_files=10):
|
|
"""清理旧的日志文件"""
|
|
if not os.path.exists(log_dir):
|
|
return
|
|
|
|
log_files = []
|
|
for file in os.listdir(log_dir):
|
|
if file.endswith('.log'):
|
|
file_path = os.path.join(log_dir, file)
|
|
log_files.append((file_path, os.path.getmtime(file_path)))
|
|
|
|
# 按修改时间排序,删除最旧的文件
|
|
log_files.sort(key=lambda x: x[1])
|
|
|
|
while len(log_files) > max_files:
|
|
oldest_file = log_files[0][0]
|
|
try:
|
|
os.remove(oldest_file)
|
|
print(f"🗑️ 删除旧日志文件: {oldest_file}")
|
|
log_files.pop(0)
|
|
except Exception as e:
|
|
print(f"⚠️ 删除日志文件失败 {oldest_file}: {e}")
|
|
break
|
|
|
|
def main():
|
|
"""主函数"""
|
|
parser = argparse.ArgumentParser(
|
|
description='带日志记录的多进程录音系统启动器',
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
使用示例:
|
|
python start_with_logging.py # 使用默认设置
|
|
python start_with_logging.py --clean-logs # 清理旧日志
|
|
python start_with_logging.py --log-dir my_logs # 指定日志目录
|
|
"""
|
|
)
|
|
|
|
parser.add_argument('--character', '-c', type=str, default='libai',
|
|
help='选择角色 (默认: libai)')
|
|
parser.add_argument('--log-dir', type=str, default='logs',
|
|
help='日志目录路径 (默认: logs)')
|
|
parser.add_argument('--clean-logs', action='store_true',
|
|
help='清理旧日志文件')
|
|
parser.add_argument('--max-log-files', type=int, default=10,
|
|
help='保留的最大日志文件数量 (默认: 10)')
|
|
parser.add_argument('--config', type=str,
|
|
help='配置文件路径')
|
|
parser.add_argument('--verbose', '-v', action='store_true',
|
|
help='详细输出')
|
|
|
|
args = parser.parse_args()
|
|
|
|
print("🚀 带日志记录的多进程录音系统")
|
|
print("=" * 60)
|
|
|
|
# 确保日志目录存在
|
|
log_dir = ensure_logs_directory()
|
|
|
|
# 清理旧日志文件
|
|
if args.clean_logs:
|
|
cleanup_old_logs(log_dir, args.max_log_files)
|
|
|
|
# 显示日志配置信息
|
|
print(f"📁 日志目录: {log_dir}")
|
|
print(f"🎭 角色: {args.character}")
|
|
print("=" * 60)
|
|
|
|
# 导入主模块并启动
|
|
try:
|
|
# 修改sys.argv以传递参数给主程序
|
|
sys.argv = ['multiprocess_recorder.py']
|
|
if args.character:
|
|
sys.argv.extend(['-c', args.character])
|
|
if args.config:
|
|
sys.argv.extend(['--config', args.config])
|
|
if args.verbose:
|
|
sys.argv.append('--verbose')
|
|
|
|
# 导入并运行主程序
|
|
import multiprocess_recorder
|
|
multiprocess_recorder.main()
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n👋 用户中断")
|
|
except Exception as e:
|
|
print(f"❌ 启动失败: {e}")
|
|
if args.verbose:
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
if __name__ == "__main__":
|
|
main() |