首页 > 代码库 > Python动态加载模块
Python动态加载模块
需求:实现一个简单的pyton程序,接收两个参数:plugin_name, data,根据不同的plugin_name定位到不同的逻辑处理模块并进行输出。
实现方案:
使用python的库函数:load_source,将插件模块加载到一个dict中key为模块名称,value为类的实例,核心代码:
def load_plugins(): global plugin_dict # 遍历插件目录加载所有py结尾的模块 for root, dirs, files in os.walk(module_path): for file in files: if file.endswith(‘.py‘): module_name = file[:-3] print module_name module_file_path = os.path.join(root, file) module = load_source(module_name, module_file_path) # 判断插件中是否存在handler类 if ‘handler‘ in dir(module): print ‘load module: %s‘ % module_name # 初始化类的实例并存入dict中, clazz = getattr(module, class_name) clazz_instance = clazz() plugin_dict.update({module_name:clazz_instance})
插件代码样例:
# 统一的类class handler: # 统一的处理接口 def parse(self, data): print data result = [] result.append(1) result.append(2) return json.dumps(result)
调用代码:
# 根据plugin找到对应的实例 clazz_instance = plugin_dict[plugin] try: ret = clazz_instance.parse(data_obj) return ret except Exception,e : print traceback.format_exc()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。