import os import importlib def get_all_proj_dir(): proj_dirs = [] # 1.Search proj from src from common import source_dir backend_dir = os.path.join(source_dir, "backend") # 检查路径是否存在 if not os.path.exists(backend_dir): raise FileNotFoundError(f"指定路径不存在: {backend_dir}") # 检查路径是否有效 if not os.path.isdir(backend_dir): raise NotADirectoryError(f"指定路径不是一个目录: {backend_dir}") for entry in os.listdir(backend_dir): if entry.startswith("proj_"): proj_dirs.append(entry) # 2.Search proj from appdata from common import get_user_appdata_path app_dir = get_user_appdata_path() usr_app_dir = os.path.join(app_dir, "onekeylog_diag") usr_plugin_dir = os.path.join(usr_app_dir, "plugin") # 检查路径是否存在 if not os.path.exists(usr_plugin_dir): raise FileNotFoundError(f"指定路径不存在: {usr_plugin_dir}") # 检查路径是否有效 if not os.path.isdir(usr_plugin_dir): raise NotADirectoryError(f"指定路径不是一个目录: {usr_plugin_dir}") for entry in os.listdir(usr_plugin_dir): if entry.startswith("proj_"): proj_dirs.append(entry) return proj_dirs def get_all_proj_name(): prefix_len = len("proj_") proj_dir = get_all_proj_dir() proj_name = [item[prefix_len:] for item in proj_dir] return proj_name def dynamic_import_lib(pacakge_name): """ 动态拼接包名并导入模块 参数: package_name : 包名 返回: 导入的模块对象,如果导入失败则返回None """ package_path = "backend." + pacakge_name try: # 动态导入模块 module = importlib.import_module(package_path) print(f"成功导入模块: {package_path}") return module except ImportError: print(f"无法导入模块: {package_path}") return None except Exception as e: print(f"导入模块时发生错误: {e}") return None def do_proj_parse(key="app"): porj_package = "proj_" + key pHandlers = dynamic_import_lib(porj_package) if hasattr(pHandlers, "start_parse"): pHandlers.start_parse()