【发布时间】:2018-08-14 19:30:11
【问题描述】:
我有几个执行特定功能(数据解析、计算等)的自定义 python 模块。然后我有描述模块的 json 配置(即模块名称、参数、函数等......)。最后,我正在创建一个我想要驱动这些模块的驱动程序脚本。配置或多或少会传递给驱动程序,该驱动程序命令模块根据此配置运行某些功能。我想做的是基于这些配置我想动态导入这些模块并运行基于配置提供的测试列表。配置的数量可以是从 1 到 N 的任何地方。测试列表要么是硬编码的,因为模块是基于模板创建的,要么是通过配置提供的。
即 json文件:
{ <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 是 key。这样我就可以遍历我的键,并调用这些模块的标准函数。
即它应该像这样运行......
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()
我希望这是有道理的,如果不只是评论的话,我可以根据需要进行澄清。
【问题讨论】:
-
如果每个脚本都没有像
if __name__ == '__main__'这样的东西,难道不是每个脚本都在导入时执行吗? -
import_module()返回一个模块对象,那么mod = importlib.import_module(itm)有什么问题,然后使用mod.func(...)调用您喜欢的模块的任何函数?