码迷,mamicode.com
首页 > 编程语言 > 详细

Python动态加载模块

时间:2014-08-04 01:39:56      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   io   for   ar   

需求:实现一个简单的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()

 


Python动态加载模块,布布扣,bubuko.com

Python动态加载模块

标签:style   blog   color   使用   os   io   for   ar   

原文地址:http://www.cnblogs.com/yancey/p/3889032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!