我用了一个python动态加载模块的方法,做了一个callback。也可以改写为加载多个插件。不多说 上代码
# coding:utf-8
import os, os.path, sys
'''callbackTest.py'''
class MyApp:
_callbackList = []
def __init__(self):
# scriptDir = os.path.join ( os.path.dirname(os.path.abspath(__file__)), "plugin" )
callbackDir = "XXXX/callback" #绝对路径
print callbackDir
# 将模块路径加到当前模块扫描的路径里
sys.path.insert(0, callbackDir)
for plug in os.listdir(callbackDir):
# print "plug: ",plug[-3:]
if (plug[-3:].lower() == ".py"):
print "__import__ ", os.path.basename(plug)[:-3]
m = __import__(os.path.basename(plug)[:-3]) #这里是关键步骤,动态import类
self._callbackList.append(m.CallbackModule())
def updateData(self):
self.runStart()
print "更新数据"
self.runEnd()
def runStart(self):
for p in self._callbackList:
p.start()
def runEnd(self):
for p in self._callbackList:
p.end()
if (__name__ == "__main__"):
app = MyApp()
app.updateData()
下面是callback目录中的两个例子
第一个例子,在方法执行前后打印日志
# coding:utf-8
'''log.py'''
class CallbackModule(object):
def start(self):
print "log函数开始前调用该方法: ", "记录开始更新数据"
def end(self):
print "log函数结束后调用该方法: ", "记录更新完毕"
第二个例子
# coding:utf-8
'''progress.py'''
import datetime
class CallbackModule(object):
today = datetime.datetime.now()
def start(self):
print "progress函数开始前调用该方法: ", datetime.datetime.strftime(self.today, '%Y-%m-%d %H:%M:%S')
def end(self):
print "progress函数结束后调用该方法: ", datetime.datetime.strftime(self.today, '%Y-%m-%d %H:%M:%S')