main.py为主程序
pluginManager.py插件加载
plugins作为应用程序插件存放目录,新增的插件.py文件放在该目录下。插件.py必须包含方法:name()和analysis(data)
如下所示:
+plugins
-plugin1.py
-plugin2.py
-plugin3.py
pluginManager.py
main.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}")
#!/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()
联系客服