我有以下示例设置:
|-- main_script.py
`-- module
|-- __init__.py
`-- submodule.py
main_script的内容是:
import optparse
import module
parser = optparse.OptionParser()
group = optparse.OptionGroup("submodules options")
group.add_option("","--main_script.bar", dest="bar", action="store_true")
parser.add_option_group(group)
opts,args = parser.parse_args()
if opts.bar:
print ("Bar")
以及submodule.py的内容是:
import optparse
parser = optparse.OptionParser()
group = optparse.OptionGroup(parser, "submodules options")
group.add_option("","--module.submodule.foo", dest="foo", action="store_true")
parser.add_option_group(group)
opts,args = parser.parse_args()
if opts.foo:
print ("Foo")
由于main_script导入子模块,因此调用了子模块中的parse_args.无论如何,如果存在选项冲突,那么组合这些OptionParser实例并引发错误?
最佳答案 最简单的方法是将逻辑分解为函数.您不应该首先在全局模块范围内执行逻辑,而是使用if name ==“__ main__”包装器构造.
您可以为每个必须定义选项的模块定义一个函数add_options(parser),并在调用parse_args之前在根级别调用它:
import optparse
import submodule
def add_options(parser):
parser.add_option(...)
def main():
parser = optparse.OptionParser()
add_options(parser)
submodule.add_options(parser)
opts, args = parser.parse_args()
#...
if __main__ == "__main__":
main()