2015-08-28 2 views
0

Я пытаюсь понять функциональность (или ошибку?) Аргумента python's argparse.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 

Когда я выполнить этот сценарий, как start и star аргументы принимаются:

[ 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- prefix-matching, но там нет упоминания о том, как его предотвратить. –

+2

Возможный дубликат [Отключить аббревиатуру] (http://stackoverflow.com/questions/10750802/disable-abbreviation) –

+0

Да, это происходит от аббревиатуры, но невозможно отключить его в python 2.X:/ – RegisS

ответ

4

Вам необходимо отключить опцию allow_abbrev, которая was introduced в версии 3.5.

Отрывок из argparse doc:

  • allow_abbrev_ - Позволяет длинные варианты, которые будут сокращены, если сокращение однозначно. (По умолчанию: True)

Это должно помочь:

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

Спасибо Andrejs !! ! – RegisS

+0

@Andrejs Я хочу использовать allow_abbrev в python2.7.x. Как я могу указать то же самое? – Karthick

+0

@ Karthick Переключитесь на 3.5 или создайте собственный парсер аргументов. –