2015-08-28 53 views
0

我尝试了解python的argparse的功能(或bug?)。Python Argparse严格的变量名称

在这里,我简单的代码:

import argparse 

parser = argparse.ArgumentParser(usage="%(prog)s [--start]", add_help=False) 
parser.add_argument("--start", help="Start prog", action="store_true") 

arguments = parser.parse_args() 
start_fpc = arguments.start 

print arguments 

当我执行这个脚本,既startstar参数被接受:

[ rsenet 2015-08-28 12:39:50] /tmp 
$ python test.py --star 
Namespace(start=True) 

[ rsenet 2015-08-28 13:59:16] /tmp 
$ python test.py --start 
Namespace(start=True) 

任何想法,为什么?如果是,是否可以禁用此功能?

+0

似乎是由于https://docs.python.org/2.7/library/argparse.html#argument-abbreviations-前缀匹配,但没有提及如何防止它。 –

+2

可能重复[禁用缩写](http://stackoverflow.com/questions/10750802/disable-abbreviation) –

+0

是的,它来自缩写,但不可能禁用它在Python 2.X中:/ – RegisS

回答

4

您需要禁用allow_abbrev选项,其中was introduced在v3.5中。从argparse doc

摘录:

  • allow_abbrev_ - 允许如果 缩写是毫不含糊的缩写长选项。 (默认:True

这应有助于:

parser = argparse.ArgumentParser(usage="%(prog)s [--start]", 
           allow_abbrev=False, 
           add_help=False) 
+0

谢谢Andrejs! ! – RegisS

+0

@Andrejs我想在python2.7.x中使用allow_abbrev。我怎样才能指定相同的? – Karthick

+0

@Karthick切换到3.5,或开发自己的参数解析器。 –