我需要创建一个调用特定目录中每个.py文件的脚本。这些是主程序的插件。每个插件脚本必须能够从调用脚本访问类和方法。
所以我有这样的事情:
mainfile.py
:
class MainClass:
def __init__(self):
self.myVar = "a variable"
for f in os.listdir(path):
if f.endswith(".py"):
execfile(path+f)
def callMe(self):
print self.myVar
myMain = MainClass()
myMain.callMe()
我希望能够在callee.py
myMain.callMe()
仅使用import
无效,因为mainfile.py
必须是正在运行的程序,callee.py
可以删除,mainfile
将自行运行。
答案 0 :(得分:1)
import os
class MainClass:
def __init__(self):
self.myVar = "a variable"
self.listOfLoadedModules = []
for f in os.listdir("."):
fileName, extension = os.path.splitext(f)
if extension == ".py":
self.listOfLoadedModules.append(__import__(fileName))
def callMe(self):
for currentModule in self.listOfLoadedModules:
currentModule.__dict__.get("callMe")(self)
myMain = MainClass()
myMain.callMe()
使用此代码,您应该能够在当前目录中调用任何python文件的callMe
函数。该函数可以访问MainClass
,因为我们将其作为参数传递给callMe
。
注意:如果您在callee.py的callMe
内拨打MainClass
callMe
,那将创建无限递归,您将获得< / p>
RuntimeError: maximum recursion depth exceeded
所以,我希望你知道你在做什么。