2013-03-08 2 views
85

Я хотел бы иметь необязательный аргумент, который будет по умолчанию значением, если присутствует только флаг без указанного значения, но сохраняет значение, указанное пользователем, вместо значения по умолчанию, если пользователь указывает значение. Есть ли для этого действие?Python argparse: значение по умолчанию или заданное значение

Пример:

python script.py --example 
# args.example would equal a default value of 1 
python script.py --example 2 
# args.example would equal a default value of 2 

Я могу создать действие, но хотел бы видеть, был ли существующий способ сделать это.

ответ

138
import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--example', nargs='?', const=1, type=int) 
args = parser.parse_args() 
print(args) 

% test.py 
Namespace(example=None) 
% test.py --example 
Namespace(example=1) 
% test.py --example 2 
Namespace(example=2) 

  • nargs='?' означает 0 или-1 аргументов
  • const=1 устанавливает значение по умолчанию, когда есть 0 аргументы
  • type=int преобразует аргумент в целое

Если вы хотите test.py установить example к 1, даже если не указано --example, затем включить default=1. То есть, с

parser.add_argument('--example', nargs='?', const=1, type=int, default=1) 

затем

% test.py 
Namespace(example=1) 
+1

Спасибо за включение по умолчанию, это было именно то, что мне было нужно. – Michael

+0

Файл «/usr/lib/python2.7/argparse.py», строка 1294, в add_argument action = action_class (** kwargs) ТипError: __init __() получил неожиданный аргумент ключевого слова 'const' –

+1

Спасибо за включение const, это было именно то, что мне было нужно. – Dannid

Смежные вопросы