我有以下示例设置:
|-- 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()
关于python - 在同一 python 执行中多次调用 OptionParser.parse_args(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871918/