在同一个python执行中多次调用OptionParser.parse_args()

我有以下示例设置:

|-- 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()
点赞