Python 加载插件的方法 pkgutil.walk_packages()的应用
最近看了wzpan的叮当机器人,然后学习了其中的插件加载方法,很实用,记录一下。
在我们要管理自己的软件时,经常要加入功能,靠写死的代码来实现添加功能,显然是不现实的,所以经常要预留一些接口,然后通过这些接口,来编写插件,从而把我们需要的功能添加到我们的程序里面。而怎么才能把我们的插件加载进我们的程序里面呢?不多说了,直接上代码。
这是一个插件包的结构
a.py b.py c.py d.py 的内容全部类似,每个文件里面都要有一个标识符,且都有共同叫start 的函数,用于启动插件。
import pkgutil
_plugins_before_listen = [] #插件列表
nameSet = set()
for finder,name,ispck in pkgutil.walk_packages(["./packge"]): #要主要这个文件目录参数是一个列表
loader = finder.find_module(name) #返回一个loader对象或者None。
mod = loader.load_module(name) #返回一个module对象或者raise an exception
nameSet.add(mod.SLUG) #用SLUG来标识每个功能模块
_plugins_before_listen.append(mod) #把模块加入列表中,方便使用
print(nameSet) #打印识别出来的标识
print(_plugins_before_listen) #打印出插件列表
print(_plugins_before_listen[1]) #看一下
_plugins[1].start() #用一下
运行结果
现在所有的插件都加载到了 _plugins列表中了,要用的时候可以通过SLUG来识别是哪个模块,然后启动它,就ok了,非常使用!!!!