123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/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()
|