我有几个自定义的python模块,它们执行特定的功能(数据解析、计算等)。然后我有了描述模块的json配置(即模块名称、参数、函数等)。最后,我创建了一个驱动脚本,我想用它来驱动这些模块。配置或多或少被传递给驱动程序,该驱动程序命令模块基于此配置运行某些功能。我想要做的是基于这些配置,我想动态地导入这些模块,并运行基于配置提供的测试列表。配置的数量可以从1到N。测试列表可以是硬编码的,因为模块是基于模板创建的,或者是通过配置提供的。
即JsonFile:
{ <module_name>: {
kw:<module>,
kw:<arg1>,
kw:<argN>
}
}代码:
<parse json code>
for key,val in jsonCfg.items():
lst.append(key)
for dctKey, itm in val.items():
if 'IMPORT' in dctkey:
importlib.import_module(itm)这就是我到目前为止所学到的基础知识。我现在被困在如何命令python调用模块代码的问题上。我希望有一个标准的进口产品...
import <module> as <module_name>其中module是itm,module_name是关键。通过这种方式,我可以遍历所有的键,并调用这些模块的标准函数。
也就是说,它的功能应该是这样的。
import moduleX as MX
MX.execute
import moduleY as MY
MY.execute但要像这样编码...(伪代码)
<parse json code>
for key,val in jsonCfg.items():
lst.append(key)
for dctKey, itm in val.items():
if 'IMPORT' in dctkey:
importlib.import_module(itm) as key
for mod in lst.items()
mod.execute()我希望这是有意义的,如果不只是评论,那么我可以根据需要进行澄清。
发布于 2018-08-15 04:02:19
importlib.import_module返回对导入的模块对象的引用,您只需创建一个新变量并存储它,以便能够访问成员:
x = importlib.import_module(module_name)
x.some_func()如果您有多个名称,您可以将导入的模块存储在某个结构、列表或字典中,任何对您有意义的内容都可以:
dynamods = {}
for key, val in jsonCfg.items():
for dctKey, itm in val.items():
if 'IMPORT' in dctkey:
dynamods[key] = importlib.import_module(itm) 然后,您可以使用它来调用函数:
for mod in dynamods
dynamods[mod].execute()https://stackoverflow.com/questions/51848558
复制相似问题