zoukankan      html  css  js  c++  java
  • CMDB服务器管理系统【s5day88】:采集资产之整合插件

    以后导入配置文件不用去from conf而是导入from lib.config,因为在这可以导入global_settings和settings.py

    import sys
    import os
    import importlib
    import requests
    BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASEDIR)
    os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
    from lib.config import settings
    
    server_info = {}
    for k,v in settings.PLUGIN_ITEMS.items():
        # 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk
        module_path,cls_name = v.rsplit('.',maxsplit=1)
        module = importlib.import_module(module_path)
        cls = getattr(module, cls_name)
        obj = cls()#就是咋们的对象
        ret = obj.process()#执行process方法 ret是v那k是什么?
        server_info[k] = ret
    
    requests.post(
        url=settings.API,
        data=server_info
    )
    

    写成函数 

    auto_client un.py

    import sys
    import os
    import importlib
    import requests
    BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASEDIR)
    os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
    from lib.config import settings
    
    if __name__ ==  '__main__':
        func()

    auto_clientsrcplugins\__init__.py

    def func():
        server_info = {}
        for k,v in settings.PLUGIN_ITEMS.items():
            # 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk
            module_path,cls_name = v.rsplit('.',maxsplit=1)
            module = importlib.import_module(module_path)
            cls = getattr(module,cls_name)
            obj = cls()
            ret = obj.process()
            server_info[k] = ret
    
        requests.post(
            url=settings.API,
            data=server_info
        )

    写成一个类(和函数没有什么区别)

    auto_clientsrcplugins\__init__.py

    import importlib
    import requests
    from lib.config import settings
    
    class PluginManager(object):
        def __init__(self):
            pass
        def exec_plugin(self):
            server_info = {}
            for k,v in settings.PLUGIN_ITEMS.items():
                # 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk
                module_path,cls_name = v.rsplit('.',maxsplit=1)
                module = importlib.import_module(module_path)
                cls = getattr(module,cls_name)
                obj = cls()
                ret = obj.process()
                server_info[k] = ret
            return server_info
    		
    """				
    requests.post(
        url=settings.API,
        data=server_info
    )
    一个文件一个目录只做一件事情
    """
    

    auto_client un.py

    import sys
    import os
    import importlib
    import requests
    BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASEDIR)
    os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
    
    from src.plugins import PluginManager
    
    if __name__ == '__main__':
        obj = PluginManager()
        server_dict = obj.exec_plugin()
        print(server_dict)

    运行截图

    写成一个类(实例化之前可以自定义很多操作)

    auto_client un.py

    import sys
    import os
    import importlib
    import requests
    BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASEDIR)
    os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
    
    from src.plugins import PluginManager
    
    if __name__ == '__main__':
        obj = PluginManager()
        server_dict = obj.exec_plugin()
        print(server_dict)

    auto_clientsrcplugins\__init__.py

    import importlib
    import requests
    from lib.config import settings
    
    class PluginManager(object):
        def __init__(self):
            pass
        def exec_plugin(self):
            server_info = {}
            for k,v in settings.PLUGIN_ITEMS.items():
                # 找到v字符串:src.plugins.nic.Nic,src.plugins.disk.Disk
                module_path,cls_name = v.rsplit('.',maxsplit=1)
                module = importlib.import_module(module_path)
                cls = getattr(module,cls_name)
                if hasattr(cls,'initial'):
                    obj = cls.initial()
                else:
                    obj = cls()
                ret = obj.process()
                server_info[k] = ret
            return server_info
    

    小结

    1. 看看这个类里有没有这个属性
    2. 如果类里有方法,我就执行initial
    3. 如果没有我就直接执行这个类cls()
    4. 如果写了必须有返回值
    5. 和上例的最大区别是在实例化之前可以自定义很多操作

    客户端截图

  • 相关阅读:
    nodepad++中的正则表达式匹配和替换操作。
    QT Creator配置环境和安装
    圣诞树小程序的制作
    C#编辑xml文件
    delegate里的Invoke和BeginInvoke
    记录RFID操作错误
    关于Panel隐藏横向滚动条
    随笔
    Java图形打印 上下对称三角星
    Centos 7.5安装 Redis 5.0.0
  • 原文地址:https://www.cnblogs.com/luoahong/p/9260314.html
Copyright © 2011-2022 走看看