""" 情绪博物馆 - 服务管理器 CLI 入口 Emotion Museum - Service Manager CLI Entry Point 用法: python manage.py start [service|all] # 启动服务 python manage.py stop [service|all] # 停止服务 python manage.py restart service # 重启服务 python manage.py status # 查看状态 python manage.py logs service [--follow] [--lines N] # 查看日志 python manage.py info # 显示访问地址 python manage.py clean service # 清理构建产物 python manage.py setup service # 安装依赖 """ import sys import io import argparse from pathlib import Path # Fix Windows console Chinese character encoding sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') from tools.service_manager import ServiceManager, PROJECT_ROOT def main(): parser = argparse.ArgumentParser( description="情绪博物馆 - 服务管理器", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" 示例: python manage.py start 启动所有服务 python manage.py start backend 启动后端服务 python manage.py stop 停止所有服务 python manage.py stop web 停止用户前端 python manage.py restart web 重启用户前端 python manage.py status 查看所有服务状态 python manage.py logs backend --follow 实时查看后端日志 python manage.py logs web --lines 100 查看前端最近 100 行日志 python manage.py info 显示所有服务访问地址 python manage.py clean web 清理前端 node_modules python manage.py setup web 安装前端依赖 """, ) subparsers = parser.add_subparsers(dest="command", help="可用命令") # start 命令 start_parser = subparsers.add_parser("start", help="启动服务") start_parser.add_argument( "service", nargs="?", default="all", help="服务名称 (默认: all)" ) start_parser.add_argument( "--skip-deps", action="store_true", help="跳过依赖检查和安装" ) # stop 命令 stop_parser = subparsers.add_parser("stop", help="停止服务") stop_parser.add_argument( "service", nargs="?", default="all", help="服务名称 (默认: all)" ) # restart 命令 restart_parser = subparsers.add_parser("restart", help="重启服务") restart_parser.add_argument("service", nargs="?", default=None, help="服务名称 (不填则重启所有服务)") # status 命令 subparsers.add_parser("status", help="查看所有服务状态") # logs 命令 logs_parser = subparsers.add_parser("logs", help="查看服务日志") logs_parser.add_argument("service", help="服务名称 (必填)") logs_parser.add_argument("--follow", "-f", action="store_true", help="实时跟踪日志") logs_parser.add_argument( "--lines", "-n", type=int, default=50, help="显示行数 (默认: 50)" ) # info 命令 subparsers.add_parser("info", help="显示服务访问地址") # clean 命令 clean_parser = subparsers.add_parser("clean", help="清理构建产物") clean_parser.add_argument("service", help="服务名称 (必填)") # setup 命令 setup_parser = subparsers.add_parser("setup", help="安装依赖") setup_parser.add_argument("service", help="服务名称 (必填)") args = parser.parse_args() if not args.command: parser.print_help() sys.exit(0) # 加载配置 config_path = PROJECT_ROOT / "manage.conf.yaml" manager = ServiceManager(config_path) # 执行命令 if args.command == "start": manager.start(args.service, skip_deps=getattr(args, "skip_deps", False)) elif args.command == "stop": manager.stop(args.service) elif args.command == "restart": manager.restart(args.service or "all") elif args.command == "status": manager.status() elif args.command == "logs": manager.logs(args.service, lines=args.lines, follow=args.follow) elif args.command == "info": manager.info() elif args.command == "clean": manager.clean(args.service) elif args.command == "setup": manager.setup(args.service) if __name__ == "__main__": main()