我有一个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中引入,因此我不能使用它。
答案 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模块。