manage.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/usr/bin/env python
  2. import os
  3. import sys
  4. import signal
  5. import socket
  6. # ====== 系统级路径配置 ======
  7. def setup_python_path():
  8. # 获取目录结构
  9. manage_dir = os.path.dirname(os.path.abspath(__file__)) # wtoaamapi/
  10. wtoaam_dir = os.path.dirname(manage_dir) # WTOAAM/
  11. project_root = os.path.dirname(wtoaam_dir) # GitExample/
  12. # 添加所有必要的搜索路径(按优先级排序)
  13. paths_to_add = [
  14. project_root, # GitExample/
  15. wtoaam_dir, # WTOAAM/
  16. os.path.join(wtoaam_dir, 'common'), # WTOAAM/common/
  17. os.path.join(wtoaam_dir, 'utils'), # WTOAAM/utils/
  18. os.path.join(wtoaam_dir, 'wtoaamapi'), # WTOAAM/wtoaamapi/
  19. os.path.join(wtoaam_dir, 'dataContract'), # 添加 dataContract 路径
  20. os.path.join(wtoaam_dir, 'dataAnalysisBehavior'), # 添加 behavior 模块路径
  21. os.path.join(wtoaam_dir, 'dataAnalysisService') # 添加 service 模块路径
  22. ]
  23. # 添加路径到 sys.path(按顺序添加,不重复)
  24. for path in paths_to_add:
  25. if path not in sys.path:
  26. sys.path.insert(0, path) # 插入到最前面保证优先级
  27. return manage_dir, wtoaam_dir, project_root
  28. # ====== 初始化路径配置 ======
  29. manage_dir, wtoaam_dir, project_root = setup_python_path()
  30. # ====== 打印调试信息 ======
  31. def print_debug_info():
  32. print("Current working directory:", os.getcwd())
  33. print("\n===== Python路径配置 =====")
  34. for p in sys.path[:15]: # 打印更多路径以便查看
  35. print(p)
  36. print("...\n=======================")
  37. print_debug_info()
  38. # ====== 安全导入自定义模块 ======
  39. try:
  40. from common.appConfig import GetLogger
  41. from utils.directoryUtil import DirectoryUtil
  42. except ImportError as e:
  43. print(f"\n!!! 关键错误: 导入失败 !!!")
  44. print(f"错误详情: {e}")
  45. print("请检查以下文件是否存在:")
  46. print(f"1. {os.path.join(wtoaam_dir, 'common/appConfig.py')}")
  47. print(f"2. {os.path.join(wtoaam_dir, 'utils/directoryUtil.py')}")
  48. sys.exit(1)
  49. def get_ip_address():
  50. """Get the IP address of the current machine."""
  51. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  52. try:
  53. s.connect(('10.254.254.254', 1))
  54. ip_address = s.getsockname()[0]
  55. except Exception:
  56. ip_address = '127.0.0.1'
  57. finally:
  58. s.close()
  59. return ip_address
  60. def customSignalHandler(signal, frame):
  61. ip_address = get_ip_address()
  62. msg1 = f'Custom signal handler: Cleanup operations can be done here.'
  63. msg2 = f'The IP address of this machine is: {ip_address}'
  64. print(msg1)
  65. logger = GetLogger()
  66. logger.warning(msg1)
  67. logger.warning(msg2)
  68. sys.exit(0)
  69. def main():
  70. # ====== 1. 先初始化日志目录 ======
  71. logDirectory = "log"
  72. if not DirectoryUtil.check_directory_exists(logDirectory):
  73. DirectoryUtil.create_directory(logDirectory)
  74. # ====== 2. 配置Django环境 ======
  75. # 方案A:如果settings.py在 wtoaamapi/wtoaamapi/settings.py
  76. settings_dir = os.path.join(manage_dir, 'wtoaamapi')
  77. # 方案B:如果settings.py直接在 wtoaamapi/settings.py
  78. # settings_dir = manage_dir
  79. # 添加settings目录到路径(如果需要)
  80. if settings_dir not in sys.path:
  81. sys.path.insert(0, settings_dir)
  82. # 设置Django配置
  83. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wtoaamapi.wtoaamapi.settings')
  84. try:
  85. # 必须先导入django再执行setup()
  86. import django
  87. django.setup() # 初始化Django
  88. from django.core.management import execute_from_command_line
  89. except ImportError as exc:
  90. # 增强错误信息
  91. current_paths = "\n".join(sys.path)
  92. raise ImportError(
  93. f"Couldn't import Django. Please check:\n"
  94. f"1. Django安装: pip show django\n"
  95. f"2. 虚拟环境: {sys.prefix}\n"
  96. f"3. 当前Python路径:\n{current_paths}\n"
  97. f"4. Settings文件位置: {settings_dir}/settings.py"
  98. ) from exc
  99. # ====== 3. 注册信号处理器 ======
  100. signal.signal(signal.SIGINT, customSignalHandler)
  101. signal.signal(signal.SIGTERM, customSignalHandler)
  102. execute_from_command_line(sys.argv)
  103. if __name__ == '__main__':
  104. main()