Argparse неправильный порядок позиционных и необязательных параметров - PullRequest
7 голосов
/ 02 мая 2011

Почему argparse не анализирует эти аргументы?

--foo 1 2 3 bar

Использование

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')                  
parser.add_argument('bar')

, что приводит к следующей ошибке:

ошибка: слишком малоarguments

Если я сначала передам аргумент bar, он будет работать:

bar --foo 1 2 3   

Теперь это само по себе неплохо.Я могу жить с наличием позиционных аргументов, во-первых, просто это поведение несовместимо с той помощью, которую argparse создает для нас, которая утверждает, что бар должен быть последним:[--foo FOO [FOO ...]] bar

Итак, как вы справляетесь с этой последовательной подсказкой?

Вот полная тестовая программа .

Ответы [ 2 ]

4 голосов
/ 02 мая 2011

nargs='+' указывает argparse собрать все оставшиеся аргументы вместе, поэтому bar включено.У него нет магического способа предположить, что вы намерены bar быть значимым аргументом сам по себе, а не частью аргументов, взятых в --foo.

Пример в документации ссылается на простой --foo аргументне один с nargs='+'.Обязательно поймите разницу.

3 голосов
/ 02 мая 2011

Может быть, попробуйте выполнить --input --output flags и установить для этих параметров значение required = True в add_argument?

http://docs.python.org/dev/library/argparse.html#the-add-argument-method

...