#!/usr/bin/env python import os import sys import signal import socket # ====== 系统级路径配置 ====== def setup_python_path(): # 获取目录结构 manage_dir = os.path.dirname(os.path.abspath(__file__)) # wtoaamapi/ wtoaam_dir = os.path.dirname(manage_dir) # WTOAAM/ project_root = os.path.dirname(wtoaam_dir) # GitExample/ # 添加所有必要的搜索路径(按优先级排序) paths_to_add = [ project_root, # GitExample/ wtoaam_dir, # WTOAAM/ os.path.join(wtoaam_dir, 'common'), # WTOAAM/common/ os.path.join(wtoaam_dir, 'utils'), # WTOAAM/utils/ os.path.join(wtoaam_dir, 'wtoaamapi'), # WTOAAM/wtoaamapi/ os.path.join(wtoaam_dir, 'dataContract'), # 添加 dataContract 路径 os.path.join(wtoaam_dir, 'dataAnalysisBehavior'), # 添加 behavior 模块路径 os.path.join(wtoaam_dir, 'dataAnalysisService') # 添加 service 模块路径 ] # 添加路径到 sys.path(按顺序添加,不重复) for path in paths_to_add: if path not in sys.path: sys.path.insert(0, path) # 插入到最前面保证优先级 return manage_dir, wtoaam_dir, project_root # ====== 初始化路径配置 ====== manage_dir, wtoaam_dir, project_root = setup_python_path() # ====== 打印调试信息 ====== def print_debug_info(): print("Current working directory:", os.getcwd()) print("\n===== Python路径配置 =====") for p in sys.path[:15]: # 打印更多路径以便查看 print(p) print("...\n=======================") print_debug_info() # ====== 安全导入自定义模块 ====== try: from common.appConfig import GetLogger from utils.directoryUtil import DirectoryUtil except ImportError as e: print(f"\n!!! 关键错误: 导入失败 !!!") print(f"错误详情: {e}") print("请检查以下文件是否存在:") print(f"1. {os.path.join(wtoaam_dir, 'common/appConfig.py')}") print(f"2. {os.path.join(wtoaam_dir, 'utils/directoryUtil.py')}") sys.exit(1) def get_ip_address(): """Get the IP address of the current machine.""" s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect(('10.254.254.254', 1)) ip_address = s.getsockname()[0] except Exception: ip_address = '127.0.0.1' finally: s.close() return ip_address def customSignalHandler(signal, frame): ip_address = get_ip_address() msg1 = f'Custom signal handler: Cleanup operations can be done here.' msg2 = f'The IP address of this machine is: {ip_address}' print(msg1) logger = GetLogger() logger.warning(msg1) logger.warning(msg2) sys.exit(0) def main(): # ====== 1. 先初始化日志目录 ====== logDirectory = "log" if not DirectoryUtil.check_directory_exists(logDirectory): DirectoryUtil.create_directory(logDirectory) # ====== 2. 配置Django环境 ====== # 方案A:如果settings.py在 wtoaamapi/wtoaamapi/settings.py settings_dir = os.path.join(manage_dir, 'wtoaamapi') # 方案B:如果settings.py直接在 wtoaamapi/settings.py # settings_dir = manage_dir # 添加settings目录到路径(如果需要) if settings_dir not in sys.path: sys.path.insert(0, settings_dir) # 设置Django配置 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wtoaamapi.wtoaamapi.settings') try: # 必须先导入django再执行setup() import django django.setup() # 初始化Django from django.core.management import execute_from_command_line except ImportError as exc: # 增强错误信息 current_paths = "\n".join(sys.path) raise ImportError( f"Couldn't import Django. Please check:\n" f"1. Django安装: pip show django\n" f"2. 虚拟环境: {sys.prefix}\n" f"3. 当前Python路径:\n{current_paths}\n" f"4. Settings文件位置: {settings_dir}/settings.py" ) from exc # ====== 3. 注册信号处理器 ====== signal.signal(signal.SIGINT, customSignalHandler) signal.signal(signal.SIGTERM, customSignalHandler) execute_from_command_line(sys.argv) if __name__ == '__main__': main()