小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python 插件式開發(fā)示例

 Jcstone 2022-07-13 發(fā)布于湖北

一、程序結(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()

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多