给出选项时,为optionparser设置默认选项

时间:2012-10-15 14:48:18

标签: python default-value choice optparse optionparser

我有一个python选项解析器,它解析一个可选的--list-something选项。 我还希望--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中引入,因此我不能使用它。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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