2016-11-30 2 views
0

Как добавить необязательный аргумент, который имеет значение по умолчанию и может быть вызван с другим значением или который может быть вызван без значения (и имеет значение по умолчанию). Так что у меня этот аргументPython argparse необязательные аргументы без аргумента (не хранить true)

parser.add_argument("-a", "--automatic", type=int, default=8) 

, и я хотел бы быть в состоянии назвать. My_script.py -a если я хочу автоматический режим с 8 как аргумент, но я также хочу сделать, например, My_script.py -a 10, если я хочу автоматический режим с 10 (или любым другим числом) в качестве аргумента. Проблема в том, что я получаю ожидаемый один аргумент, когда я запускаю My_script.py -a. Если я не хочу указывать 8, мне также не разрешено указывать -a, а затем мне нужно запустить My_script.py, чего я не хочу.

+0

Если передача ничего не эквивалентна передаче '-a' без значения, зачем разрешать последнее? Это просто облегчает ошибки/двусмысленность в разборе. 'nargs = '?' '(вы должны вручную заменить' None' на '8', когда это произойдет, потому что если предоставлено без аргумента, это не случай по умолчанию, поэтому он хранит' None'), но это плохая идея. – ShadowRanger

+0

Это кажется неоднозначным. Как должен аналитик определить, является ли вещь после '-a' значением для опции -a' или позиционного аргумента? Независимо от того, поддерживает или нет argparse, я не думаю, что это хороший интерфейс. – user2357112

+0

Играйте с 'nargs = '?'' И дайте ему параметры 'default' и' const'. – hpaulj

ответ

0

Добавить nargs='?' и const=8. От the documentation:

Объекты ArgumentParser обычно связывают один аргумент командной строки с одним действием, которое необходимо предпринять. Аргумент ключевого слова nargs связывает другое количество аргументов командной строки с одним действием.

...

'?'. Один аргумент будет потребляться из командной строки, если это возможно, и создается как отдельный элемент. Если аргумент командной строки отсутствует, будет произведено значение от default. Обратите внимание, что для необязательных аргументов есть дополнительный случай - строка опций присутствует, но не соответствует аргументу командной строки. В этом случае будет произведено значение от const.

+1

Этого недостаточно, вы необходимо передать 'const' тоже, как отмечает @hpaulj, или передать коммутатор без значения сохраняет' None', а не значение 'default'. – ShadowRanger

+0

Правильно, @ShadowRanger. Я обновил свой ответ. Спасибо вам и hpaulj за исправление. – Chris