Как добавить аргумент по умолчанию для выбора опции python

Я работаю над инструментом CLI Python, который использует библиотеку кликов.

Я хочу иметь опцию --opt1, которая работает следующим образом:

  • Если я запускаю программу без этого, ее значение должно быть None.
  • Если я запускаю программу таким образом script --opt1, ее значение должно быть значением по умолчанию.
  • Если я указываю значение для параметра, я имею в виду, что если я запускаю скрипт таким образом, script --opt1=value его значение должно быть value.

Поэтому я добавил следующую опцию:

@click.option(
    "--opt1",
    metavar="PATH",
    default="opt1-default",
    type=click.Path(exists=True, resolve_path=True),
    show_default=True,
)

Но когда я запускаю команду с параметром --opt1, я получаю следующую ошибку:

Usage error: --opt1 option requires an argument, хотя --opt1 --help показывает значение по умолчанию:

Options:
  --opt1 PATH    [default: opt1-default]

В чем тут может быть дело?

Спасибо.


person Roman_T    schedule 20.03.2020    source источник
comment
Я думаю, вы путаете параметры и флаги. Значение по умолчанию — это значение, которое программа использует, когда вы не ставите --opt1. Если вы ставите --opt1, вам нужно присвоить ему значение.   -  person rassar    schedule 20.03.2020
comment
Есть ли способ дать ему значение по умолчанию? и если я не укажу эту опцию, вообще не присваивать никакого значения?   -  person Roman_T    schedule 20.03.2020
comment
Итак, вы хотите три состояния. 1) если --opt не указан, значение равно None, 2) если --opt задан без значения, используйте значение по умолчанию, 3) если --opt используется со значением, то путь должен существовать?   -  person Stephen Rauch    schedule 21.03.2020
comment
Да, это именно то, что я хочу   -  person Roman_T    schedule 22.03.2020
comment
Отвечает ли это на ваш вопрос? щелчок python, сделать значение параметра необязательным   -  person eng.mrgh    schedule 24.03.2020
comment
Вот обсуждение GitHub по вашему вопросу. github.com/pallets/click/issues/549   -  person eng.mrgh    schedule 24.03.2020
comment
@engmrgh да, это так. Спасибо.   -  person Roman_T    schedule 24.03.2020