一、程序結(jié)構(gòu)main.py為主程序 pluginManager.py插件加載 plugins作為應(yīng)用程序插件存放目錄,新增的插件.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加載插件并運(yùn)行插件方法#!/usr/bin/env python # -*- coding:utf-8 -*- """ @Author : Jc Stone """ from pluginManager import PluginManager import logging import LogHelper def main(): # 獲取模塊列表 functions = PluginManager.GetPluginModules() # 運(yùn)行模塊方法 fun = functions[2] print(fun.name()) fun.analysis("test") if __name__ == "__main__": LogHelper.InitLogger(logging.getLogger()) main() |
|