Как продолжение ответа @VinaySajip. Есть дополнительные nargs
достоинства, о которых стоит упомянуть .
parser.add_argument('dir', nargs=1, default=os.getcwd())
N (целое число). N аргументов из командной строки будут собраны в список
parser.add_argument('dir', nargs='*', default=os.getcwd())
'*'. Все имеющиеся аргументы командной строки собраны в список. Обратите внимание, что обычно не имеет большого смысла иметь более одного позиционного аргумента nargs='*'
, но возможно несколько дополнительных аргументов с nargs='*'
.
parser.add_argument('dir', nargs='+', default=os.getcwd())
'+'. Как и в случае с *, все имеющиеся аргументы командной строки собраны в список. Кроме того, будет сгенерировано сообщение об ошибке, если не было хотя бы одного аргумента командной строки.
parser.add_argument('dir', nargs=argparse.REMAINDER, default=os.getcwd())
argparse.REMAINDER
, Все остальные аргументы командной строки собраны в список. Это обычно полезно для утилит командной строки, которые отправляют другим утилитам командной строки
Если nargs
ключевое слово аргумент не указано, количество используемых аргументов определяется действием. Обычно это означает, что будет использован один аргумент командной строки и будет создан один элемент (не список).
Редактировать (скопировано из комментария @Acumenus) nargs='?'
Документы говорят: «?». Один аргумент будет использован из командной строки, если это возможно, и будет создан как один элемент. Если аргумент командной строки отсутствует, будет создано значение по умолчанию.
?
и*
означают тот же самые они означают в регулярных выражениях (т.е.?
требуется 0 или 1, и*
требуя 0 или больше)? Если так, то+
работает ли так же?