Python-主程序的插件

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

我需要制作一个脚本,调用特定目录中的每个.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
将自行运行

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
中,我们不需要导入它,因为我们将它作为参数传递。