【问题标题】:Set a default choice for optionparser when the option is given给定选项时为 optionparser 设置默认选项
【发布时间】:2016-12-18 18:22:52
【问题描述】:

我有一个解析可选 --list-something 选项的 python 选项解析器。 我还希望 --list-something 选项有一个可选参数(一个选项)

在这里使用参数default="simple" 不起作用,否则简单将永远 成为默认值,不仅是在给出 --list-something 时。

from optparse import OptionParser, OptionGroup
parser = OptionParser()
options = OptionGroup(parser, "options")
options.add_option("--list-something",
                   type="choice",
                   choices=["simple", "detailed"],
                   help="show list of available things"
                  )
parser.add_option_group(options)
opts, args = parser.parse_args()
print opts, args

上面的代码产生了这个:

[jens@ca60c173 ~]$ python main.py --list-something simple
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py --list-something 
Usage: main.py [options]

main.py: error: --list-something option requires an argument
[jens@ca60c173 ~]$ python main.py 
{'list_something': None} []

但我希望这种情况发生:

[jens@ca60c173 ~]$ python main.py --list-something simple
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py --list-something 
{'list_something': 'simple'} []
[jens@ca60c173 ~]$ python main.py 
{'list_something': None} []

我想要在 python 2.4 到 3.0 之前开箱即用的东西(不包括 3.0)

由于 argparse 仅在 python 2.7 中引入,这不是我可以使用的。

【问题讨论】:

  • 我认为使用argparse 很容易做到这一点。我已经将argparse 与python2.6 一起使用了——我不确定它还能工作多远……
  • 感谢您的建议,但是我无法使用任何外部依赖项,因此我更新了我希望它在 python 2.4-3.0 上开箱即用的问题

标签: python default-value choice optparse optionparser


【解决方案1】:

Optparse 没有任何选项可以轻松完成此操作。相反,您必须为您的选项创建自定义回调。解析你的选项时触发回调,此时你可以检查剩余的args,看看用户是否为选项输入了参数。

查看文档的自定义回调部分,特别是 Callback example 6: variable arguments

【讨论】:

【解决方案2】:

python 中的 Optparser 没有默认值。
但是,您可以使用以下 -

# show help as default
if len(sys.argv) == 1:
  os.system(sys.argv[0] + " -h")
  exit()

这将使用 -h 选项运行相同的脚本,然后退出。
请注意 - 您需要导入 sys 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2012-11-16
    相关资源
    最近更新 更多