建模程序 多个定时程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

84 lines
3.3 KiB

import sys
import os
import importlib
from utils.config import cfg, get_work_dir
# 在模块级别显式导入,确保 PyInstaller 能检测到并打包这些模块
# 这些导入语句会被 PyInstaller 分析,确保模块被包含
# 注意:不要使用 try-except,因为 PyInstaller 需要看到这些导入才能正确打包
import auto_sliceing_operate.main_begin_sliceing
import auto_sliceing_operate.main_download_zip
import download_batch_data.main_download_batch_data_and_trans
# 同时导入这些模块的依赖,确保所有子模块都被包含
import auto_sliceing_operate.utils
import auto_sliceing_operate.utils.exe_operate
import auto_sliceing_operate.utils.click_soft_button
import auto_sliceing_operate.utils.import_all_file
import auto_sliceing_operate.utils.miniIo
import auto_sliceing_operate.utils.oss_redis
import auto_sliceing_operate.utils.request
import auto_sliceing_operate.utils.logs
import download_batch_data.utils
def get_command_handler(command):
"""动态导入并返回命令处理函数"""
try:
if command == 'batch_download':
module = importlib.import_module('download_batch_data.main_download_batch_data_and_trans')
return module.main
elif command == 'begin_sliceing':
module = importlib.import_module('auto_sliceing_operate.main_begin_sliceing')
return module.main
elif command == 'download_slice':
module = importlib.import_module('auto_sliceing_operate.main_download_zip')
return module.main
else:
return None
except ModuleNotFoundError as e:
print(f'错误: 无法找到模块 - {e}')
print('这可能是 PyInstaller 打包问题,请检查打包配置。')
print(f'尝试导入的模块: {command}')
raise
except Exception as e:
print(f'错误: 导入模块时发生异常 - {e}')
raise
if __name__ == '__main__':
# 可用命令列表
available_commands = ['batch_download', 'begin_sliceing', 'download_slice']
# 检查参数数量
if len(sys.argv) < 2:
print('Usage: python main.py <command> [work_dir]')
print('可用命令:', ' | '.join(available_commands))
print('\n注意: work_dir 参数可选,如果未提供将从配置文件读取默认值')
sys.exit(1)
command = sys.argv[1]
# 检查命令是否存在
if command not in available_commands:
print(f'错误: 未知命令 "{command}"')
print('可用命令:', ' | '.join(available_commands))
sys.exit(1)
# 获取工作目录:优先使用命令行参数,其次使用配置文件,最后使用 None
work_dir = None
if len(sys.argv) > 2:
work_dir = sys.argv[2]
# 打印配置信息(可选,用于调试)
if cfg('log.level', 'INFO') == 'DEBUG':
print(f'配置信息:')
print(f' - API URL: {cfg("api.base_url", "未配置")}')
print(f' - Redis Host: {cfg("redis.host", "未配置")}')
print(f' - 工作目录: {work_dir if work_dir else "未指定(将使用默认值)"}')
# 动态导入并执行对应的处理函数
handler = get_command_handler(command)
if handler is None:
print(f'错误: 无法加载命令 "{command}" 的处理模块')
sys.exit(1)
handler(work_dir=work_dir)