Как заставить argparse рассматривать все аргументы как позиционные?

Как заставить анализатор argparse обрабатывать все аргументы как позиционные< /em>, даже те, которые выглядят как опции? Например, с этим определением:

parser.add_argument('cmd', nargs='*', help='The command to run')

Я хочу иметь возможность бегать

prog.py mycomand --foo arg

и зафиксируйте ['mycomand', '--foo', 'arg'] в качестве аргумента cmd.


person planetp    schedule 13.08.2020    source источник
comment
Почему бы не использовать sys.argv[1:], если вы хотите захватить все?   -  person modesitt    schedule 14.08.2020
comment
Программа на самом деле использует много подпарсеров (для поддержки подкоманд), поэтому мне нужно argparse.   -  person planetp    schedule 14.08.2020
comment
Можете ли вы использовать ответ описан здесь или вам нужен родительский парсер, чтобы решить хорошо   -  person modesitt    schedule 14.08.2020
comment
REMAINDER и -- можно использовать для принудительной интерпретации оставшихся аргументов как позиционных. См. документы   -  person hpaulj    schedule 15.08.2020


Ответы (1)


Оказалось, что мне просто нужно было заменить nargs='*' на nargs=argparse.REMAINDER. Из документов:

argparse.REMAINDER Все остальные аргументы командной строки собираются в список. Это обычно полезно для утилит командной строки, которые отправляются другим утилитам командной строки.

Это тоже работает, но менее удобно:

prog.py mycomand -- --foo arg
person planetp    schedule 15.08.2020