我已经阅读了这个答案:How to import a module given the full path?我仍然不确定解决问题的最佳方法是什么,我想看看社区有什么要说的。我通过实例学得最好,对不起,如果我在这里厚!
我有一个充满任意目录和文件的目录树,我抓取它来查找目录作为类别,然后里面的.py文件都是一个模块。我没有问题爬行目录树并找到文件,问题是正确导入它们并在以后使用它们。我正在使用Python 3.4。
我应该提一下,我可以控制我要导入的每个文件,并且可以指定在导入时可用于解析的格式或名称。 编辑示例用例如下:> use /parsers/foo
然后加载模块,然后发出parsers/foo > set filename bar.xml
然后发出parsers/foo > run
命令和数据被解析并保存到数据库中。
我想我的问题是:
这是我使用prompt_toolkit构建的CLI界面。我们的想法是发布像“使用类别/模块”这样的命令,比如Metasploit或其他类似的接口。
这是目录/模块抓取代码:
def _load_modules(self, mod_path):
self.modules = {}
# walk through the module tree
for dirpath, subdirs, filenames in os.walk(mod_path):
if len(filenames) > 0:
for filename in [f for f in filenames if f.endswith('.py')]:
# extract the category from the module directory
cat = (re.search('/modules/([^/]*)', dirpath).group(1))
self.modules.setdefault(cat,list()).append(
(dirpath, filename)
)
谢谢你的帮助。
答案 0 :(得分:0)
你没有提到你的CLI界面是如何工作的,所以我假设你做了最简单的事情而且只是eval
- 无论用户给你什么。我不赞同这种做法,但奥卡姆的剃刀等等。
我只是想看看有人如何管理导入一堆模块......
module_names = ["math", "string", "collections"]
modules = {}
for name in module_names:
modules[name] = __import__(name)
...然后可能是一个稍后如何调用它的代码示例。
command = "collections.Counter(string.uppercase)"
result = eval(command, modules)
print "The result of your command is", repr(result)