python - 给定选项时为 optionparser 设置默认选择

标签 python default-value optparse optionparser

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

使用参数 default="simple" 在这里不起作用,否则 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 中引入,所以这不是我可以使用的东西。

最佳答案

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

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

关于python - 给定选项时为 optionparser 设置默认选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12898153/

相关文章:

python - 名称错误 : global name 'imfilter' is not defined

python - 关注 Mechanize 的链接

c++ - 为什么C++11定义一个不存在的值作为默认值?

drop-down-menu - HTML.Kendo().Dropdownlist 设置默认项

ruby - 如何使用 OptionParser 处理目录或文件

python - Python中黑名单和白名单的字符串处理

python - 需要线程阻止下一个代码行,但不需要其他线程

c# - 如何告诉 XmlSerializer 始终使用 [DefautValue(...)] 序列化属性?

python - 如何将 optparse() 代码升级为 argparse() 代码

ruby - 如何通过 Homebrew 程序分发 ruby​​ 脚本