Python - 主程序插件

时间:2013-10-21 03:17:38

标签: 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"):
                execfile(path+f)

    def callMe(self):
        print self.myVar

myMain = MainClass()
myMain.callMe()

我希望能够在callee.py

中执行以下操作
myMain.callMe()

仅使用import无效,因为mainfile.py必须是正在运行的程序,callee.py可以删除,mainfile将自行运行。

1 个答案:

答案 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

所以,我希望你知道你在做什么。