import getpass import os import sys from pathlib import Path class RuntimeEnvironmentService: """ CLI 运行时环境服务。 该服务集中管理后端根目录解析、Python 解释器定位等稳定运行时能力, 避免调用方继续依赖零散模块级函数。 """ @staticmethod def is_backend_project_dir(project_dir: Path) -> bool: """ 判断目录是否为后端项目根目录。 :param project_dir: 待检查目录 :return: 是否为后端项目根目录 """ return ( (project_dir / 'app.py').exists() and (project_dir / 'config' / 'env.py').exists() and (project_dir / 'cli').is_dir() ) def get_backend_dir(self) -> str: """ 获取后端根目录绝对路径。 :return: 后端根目录绝对路径 """ current_dir = Path.cwd().resolve() if self.is_backend_project_dir(current_dir): return str(current_dir) return os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @staticmethod def get_python_executable() -> str: """ 获取当前 CLI 进程使用的 Python 解释器。 :return: Python 解释器路径或命令名 """ return sys.executable or 'python' class RuntimeOperatorService: """ CLI 运行时操作者解析服务。 该服务集中提供当前 CLI 进程的操作者名称解析能力, 避免各领域运行时对象继续复制相同的 `getpass.getuser()` 回退逻辑。 """ @staticmethod def resolve_operator() -> str: """ 解析当前 CLI 操作者名称。 :return: 操作者名称 """ try: return getpass.getuser() or 'shierfeng-cli' except Exception: return 'shierfeng-cli' RUNTIME_ENVIRONMENT = RuntimeEnvironmentService() RUNTIME_OPERATOR = RuntimeOperatorService()