#python #list #argparse
Вопрос:
Допустим, пользователь вводит:
./args.py --create --mem 5
и мой парсер выглядит так:
parser.add_argument('--create', nargs='*', default=None)
Обычно --create
принимает список с nargs='*'
, однако в этом случае пользователь ничего не передал.
Я бы хотел, чтобы --create
при вызове было установлено значение по умолчанию, вместо этого я получаю []
Вопрос: Можно ли в любом случае определить, --create
отображается ли в аргументах командной строки что-либо после этого?
Комментарии:
1.
create
устанавливается в список следующих строк. С » * » этот список может быть пустым,[]
.2. Хитрость в том, что
create = default
когда не пройдено иcreate = []
когда пройдено без чего-либо последующего. Я ожидал, что все будет наоборот.3. Поэтому теперь мой код ищет
[]
вместо значения по умолчанию.4. Значение по умолчанию для a
positional
с `nargs=’*’ является особенно сложным, так как «ничто» не удовлетворяет его требованиям.. Это всегда видно, даже когда нет никаких строк.
Ответ №1:
Вот простой фрагмент кода:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--create', nargs='*', default=None)
options = parser.parse_args()
print(options)
Вот несколько взаимодействий:
$ ./args.py
Namespace(create=None)
$ ./args.py --create
Namespace(create=[])
$ ./args.py --create one
Namespace(create=['one'])
$ ./args.py --create one two
Namespace(create=['one', 'two'])
Как вы можете видеть, если пользователь не добавляет --create
флаг, то это так None
. Если пользователь использует --create
флаг без ничего, вы получите пустой список.