Python-主程序的插件
我需要制作一个脚本,调用特定目录中的每个.py文件。这些是主程序的插件。每个插件脚本必须能够从调用脚本访问类和方法 所以我有这样的想法:Python-主程序的插件,python,file,python-2.7,plugins,Python,File,Python 2.7,Plugins,我需要制作一个脚本,调用特定目录中的每个.py文件。这些是主程序的插件。每个插件脚本必须能够从调用脚本访问类和方法 所以我有这样的想法: mainfile.py: class MainClass: def __init__(self): self.myVar = "a variable" for f in os.listdir(path): if f.endswith(".py"): execfil
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
将自行运行
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
,将创建无限递归,您将得到
RuntimeError: maximum recursion depth exceeded
所以,我希望你知道你在做什么
使用此代码,您应该能够调用当前目录中任何python文件的callMe
函数。该函数将访问MainClass
,因为我们将它作为参数传递给callMe
注意:如果在callee.py的callMe
中调用MainClass
的callMe
,将创建无限递归,您将得到
RuntimeError: maximum recursion depth exceeded
所以,我希望你知道你在做什么。在callee.py中从mainfile导入MainClass怎么样?@yakiang-这段代码永远不会执行,因为
callee.py
不是主程序。@user2529202:如何打开plugins.py源文件?当使用标准的import
时,执行模块,然后@yakiang solution就可以了…如果callee.py调用myMain的callMe,这会不会创建无限循环?@mguijar如果从mainfile导入MainClass
中的callee.py
中执行mainfile.py
,则不会执行callee.py
。即使这样做有效,我也需要能够访问myMain
对象,不仅仅是MainClass
类。那么在callee.py中从mainfile导入MainClass
如何呢?@yakiang-该代码永远不会执行,因为callee.py
不是主程序。@user2529202:如何打开plugins.py源文件?当使用标准的import
时,执行模块,然后@yakiang solution就可以了…如果callee.py调用myMain的callMe,这会不会创建无限循环?@mguijar如果从mainfile导入MainClass
中的callee.py
中执行mainfile.py
,则不会执行callee.py
。即使这样做有效,我也需要能够访问myMain
对象,而不仅仅是MainClass
类。如果扩展名=“.py”和文件名!=“主文件”。EDIT Nevermind,这是因为我将import main file
放在callee.py
中,我们不需要导入它,因为我们将它作为参数传递。每当我尝试这样做时,基本上每当我调用\u import\u
时,它都会再次执行我的主脚本。如果扩展名=“.py”和文件名!=“主文件”。EDIT Nevermind,这是因为我将import main file
放在callee.py
中,我们不需要导入它,因为我们将它作为参数传递。