一、程序结构main.py为主程序 pluginManager.py插件加载 plugins作为应用程序插件存放目录,新增的插件.py文件放在该目录下。插件.py必须包含方法:name()和analysis(data) 如下所示: +plugins -plugin1.py -plugin2.py -plugin3.py pluginManager.py main.py 二、pluginManager.py代码GetPluginModules()返回插件module列表 import os import importlib class PluginManager: __PluginPath = 'plugins' def __init__(self): super().__init__(self) @staticmethod def GetPluginModules(): modules = [] pluginPath = PluginManager.__PluginPath if not os.path.isdir(pluginPath): raise EnvironmentError(f'{pluginPath} 目录不存在!') items = os.listdir(pluginPath) for item in items: pp = os.path.join(pluginPath, item) if os.path.isdir(pp): continue else: if (not item.endswith('.py')) or item == '__init__.py': continue moduleName = item[:-3] fun = importlib.import_module(f"{pluginPath}.{moduleName}") modules.append(fun) return modules 三、插件编写示例代码plugin1.py(py文件名可任意) """ 分析方法之一 """ def name(): return "分析方法1" def analysis(data): print(f"Plugin1:{data}") plugin2.py(py文件名可任意) """ 分析方法之一 """ def name(): return "分析方法2" def analysis(data): print(f"Plugin2:{data}") 四、main.py加载插件并运行插件方法#!/usr/bin/env python # -*- coding:utf-8 -*- """ @Author : Jc Stone """ from pluginManager import PluginManager import logging import LogHelper def main(): # 获取模块列表 functions = PluginManager.GetPluginModules() # 运行模块方法 fun = functions[2] print(fun.name()) fun.analysis("test") if __name__ == "__main__": LogHelper.InitLogger(logging.getLogger()) main() |
|