以后导入配置文件不用去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\run.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_client\src\plugins\__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_client\src\plugins\__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\run.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\run.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\src\plugins\__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
小结
- 看看这个类里有没有这个属性
- 如果类里有方法,我就执行initial
- 如果没有我就直接执行这个类cls()
- 如果写了必须有返回值
- 和上例的最大区别是在实例化之前可以自定义很多操作