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

标签 python optionparser

我有以下示例设置:

|-- 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/

相关文章:

python - 类型错误 : 'tuple' object is not callable while calling multiprocessing in python

python - 在 Beautifulsoup Python 上排除不需要的标签

Python Discord bot - 关于消息分割和更改

ruby - 如何使用 Ruby OptionParser 指定所需的开关(不是参数)?

ruby - Ruby 的 OptionParser 是如何工作的?

python - 在 Python3 中使用类型提示初始化 Optional Dict 的正确方法?

python - 你的 python 模式钩子(Hook)里有什么?

ruby - 如何在 ruby​​ 的 OptionParser 中使用变量参数

c++ - boost::program_options 具有多个标记的配置文件选项

Ruby OptionParser : 2 options, 1 个参数