笔记
使用os.environ传递数据
# -*- coding:utf-8 -*- import os username = input("username>>") password = input("password>>") os.environ.setdefault("u",username) os.environ.setdefault("p",password) if __name__ == '__main__': from haha import run run()
# -*- coding:utf-8 -*- import os def run(): u = os.environ.get("u") p = os.environ.get("p") print("{}_{}".format(u,p))
settings,融合global_settings和用户settings
""" 内置配置文件 """ NAME1 = "global_settings" NAME2 = "global_settings_2"
# -*- coding:utf-8 -*- """ 自定义配置文件 """ import os BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MODE = "AGENT" # SALT,SSH,AGENT SSH_USER = "root" SSH_PWD = "root" SSH_KEY = "/xxx/xxx/xx" SSH_PORT = 22 DEBUG = True PLUGINS_DICT = { "basic":"src.plugins.basic.Basic", "board":"src.plugins.board.Board", "cpu":"src.plugins.cpu.Cpu", "disk":"src.plugins.disk.Disk", "memory":"src.plugins.memory.Memory", "nic":"src.plugins.nic.Nic", } API = "http://1.1.1.1:8000/api/asset.html" CERT_PATH = os.path.join(BASEDIR,"config","cert")
from . import global_settings # 导入global_settings import os import importlib class Settings(object): def __init__(self): # ############## 找到默认配置global_settings ############## for name in dir(global_settings): # 遍历global_settings的变量 if name.isupper(): # 如果变量为大写,则是settings里定义的变量。global_settings的变量名约定俗成为大写。 value = getattr(global_settings,name) setattr(self,name,value) # 把key:name,value:value的赋给Settings # ############## 找到自定义配置,比默认配置优先级高,因此放在下面,下面的会覆盖上面的 ############## # 根据字符串导入模块 settings_module = os.environ.get("USER_SETTINGS") # 在start.py已把用户自定义settings导入到environ变量,现结合importlib导入模块 if not settings_module: return m = importlib.import_module((settings_module)) for name in dir(m): # 与上面的gloabl_settings类似 if name.isupper(): value = getattr(m,name) setattr(self,name,value) settings = Settings() # 实例化
# -*- coding:utf-8 -*- import os import sys os.environ["USER_SETTINGS"] = "config.settings" BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) from src import script if __name__ == '__main__': script.run()
更详细的,可查看django的settings,from django.conf import settings

插件式代码
类似django的中间件
PLUGINS_DICT = {
"basic":"src.plugins.basic.Basic",
"board":"src.plugins.board.Board",
"cpu":"src.plugins.cpu.Cpu",
"disk":"src.plugins.disk.Disk",
"memory":"src.plugins.memory.Memory",
"nic":"src.plugins.nic.Nic",
}
# 放在 src/plugins/__init__.py import importlib import traceback from lib.conf.config import settings class PluginManager(object): def exec_plugin(self): """ 获取所有的插件,并执行获取插件返回值 :return: """ response = {} for k,v in self.plugin_dict.items(): # 'basic': "src.plugins.basic.Basic", ret = {'status':True,'data':None} try: module_path, class_name = v.rsplit('.', 1) m = importlib.import_module(module_path) cls = getattr(m,class_name) # 这里是根据settings里的PLUGINS_DICT进行逐个导入 if hasattr(cls,'initial'): obj = cls.initial() # 自定义一个钩子 else: obj = cls()
from importlib import import_module def load_object(path): """Load an object given its absolute object path, and return it. object can be a class, function, variable or an instance. path ie: 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware' """ try: dot = path.rindex('.') except ValueError: raise ValueError("Error loading object '%s': not a full path" % path) module, name = path[:dot], path[dot+1:] # module, _, name = path.rpartition(".") # if not all([module,name]):raise ValueError("Error loading object '%s': not a full path" % path) mod = import_module(module) try: obj = getattr(mod, name) except AttributeError: raise NameError("Module '%s' doesn't define any object named '%s'" % (module, name)) return obj
类属性转换为实例属性
1 class Form(object): 2 def __init__(self, handler=None): 3 """ 4 5 :param handler: Tornado请求中的XXXHandler对象 6 :return: 7 """ 8 self.handler = handler 9 self.FiledDict = {} 10 self.value_dict = {} 11 self.error_dict = {} 12 self.valid_status = True 13 14 self.initialize() 15 16 def initialize(self): 17 """ 18 初始化,将派生类Form中的静态字段拷贝到字段FiledDict中,并为字段对应的Html插件设置id和name属性 19 :return: 20 """ 21 for k, v in self.__class__.__dict__.items(): 22 if isinstance(v, Field): 23 field = copy.deepcopy(v) 24 field.name = k 25 field.widget.attr['name'] = k 26 """ 27 if 'id' not in field.widget.attr: 28 field.widget.attr['id'] = '%s_%s' % ('id', k) 29 """ 30 self.FiledDict[k] = field 31 self.__dict__.update(self.FiledDict)

浙公网安备 33010602011771号