startup.py

#!/usr/bin/env python3
"""
AI Quant 项目一键启动脚本
面向用户,无代码门槛
"""

import sys
import os
import logging
import argparse

# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[
        logging.FileHandler("aiquant.log"),
        logging.StreamHandler()
    ]
)

logger = logging.getLogger("AIQuant.startup")


def main():
    """
    主入口函数
    """
    logger.info("AI Quant 项目启动中...")

    try:
        # 解析命令行参数
        parser = argparse.ArgumentParser(
            description="AI Quant 项目启动脚本"
        )
        parser.add_argument(
            "--mode",
            choices=["gui", "console", "test"],
            default="gui",
            help="启动模式:gui(图形界面)/ console(控制台)/ test(测试模式)"
        )
        parser.add_argument(
            "--config",
            default="config/main_config.py",
            help="配置文件路径"
        )
        parser.add_argument(
            "--log-level",
            choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
            default="INFO",
            help="日志级别"
        )

        args = parser.parse_args()

        # 调整日志级别
        logging.getLogger().setLevel(getattr(logging, args.log_level))

        logger.info(f"启动模式: {args.mode}")
        logger.info(f"配置文件: {args.config}")
        logger.info(f"日志级别: {args.log_level}")

        # 启动相应的模式
        if args.mode == "gui":
            logger.info("启动图形界面...")
            from app.main import run_gui
            run_gui(args.config)
        elif args.mode == "console":
            logger.info("启动控制台模式...")
            from app.console import run_console
            run_console(args.config)
        elif args.mode == "test":
            logger.info("启动测试模式...")
            from app.test import run_tests
            run_tests()

        logger.info("AI Quant 项目启动成功")
        return 0

    except ImportError as e:
        logger.error(f"模块导入错误: {e}")
        logger.error("请检查依赖包是否已正确安装")
        return 1
    except Exception as e:
        logger.error(f"启动失败: {e}")
        logger.exception("详细错误信息:")
        return 2


if __name__ == "__main__":
    try:
        sys.exit(main())
    except KeyboardInterrupt:
        logger.info("程序被用户中断")
        sys.exit(0)