Python2.7 argparse.parse_known_args неправильно анализирует

background У меня есть сценарий, в котором я использую parseargs для частичного анализа ввода.

parser = argparse.ArgumentParser()
parser.add_argument("-c", action="store_true")
nspc = parser.parse_known_args()

Причина использования parseargs заключается в том, чтобы разрешить использование параметра -c в любом месте ввода. Я хочу разобрать только эту опцию, а затем позже в коде я самостоятельно выполняю дополнительный анализ. Причина этого в том, что сценарий принимает большое количество аргументов из файла конфигурации, т. е. myscript.py не знает эти аргументы до момента выполнения.

проблема Проблема, с которой я сталкиваюсь, заключается в том, что некоторые аргументы могут начинаться с буквы "с", поэтому, если я скажу

$ myscript.py "some argument" -cdef

я получаю ошибку

myscript.py: ошибка: аргумент -c: игнорируется явный аргумент 'ef'

Поскольку я сказал parser.add_argument("-c", ..., я ожидал, что -c будет проанализирован, а -cdef - нет. Очевидно, что -c является необязательным аргументом.

Как я могу сказать синтаксическому анализатору, что -c — это вариант, а -cdef — нет?


person Erin    schedule 26.07.2013    source источник


Ответы (1)


Используйте -- для многосимвольных имен аргументов.

В UNIX довольно часто -cdef означает -c -d -e -f, тогда как --cdef — это единственный вариант. argparse следует этому соглашению.

(Например: ls -la эквивалентно ls -l -a, тогда как ls --color — это всего лишь один вариант.)

person Amber    schedule 26.07.2013
comment
Ууу, я чувствую себя тупицей. Спасибо за быстрый ответ! - person Erin; 26.07.2013