我写了一个主要的 python 模块,需要加载一个文件解析器才能工作,最初我是一个只有一个文本解析器模块,但我需要为不同的情况添加更多的解析器。
parser_class1.py
parser_class2.py
parser_class3.py
每个正在运行的实例只需要一个,然后我想通过命令行加载它:
mmain.py -p parser_class1
出于这个目的,我编写了这段代码,以便在调用主模块时选择要加载的解析器:
#!/usr/bin/env python
import argparse
aparser = argparse.ArgumentParser()
aparser.add_argument('-p',
action='store',
dest='module',
help='-p module to import')
results = aparser.parse_args()
if not results.module:
aparser.error('Error! no module')
try:
exec("import %s" %(results.module))
print '%s imported done!'%(results.module)
except ImportError, e:
print e
但是,我读到这种方式很危险,也许没有标准..
那么,这种方法可以吗?或者我必须找到另一种方法来做到这一点?为什么?谢谢,欢迎任何评论。