Опции#

Класс click.Option:

class click.Option(
    param_decls=None,
    show_default=False,
    prompt=False,
    confirmation_prompt=False,
    hide_input=False,
    is_flag=None,
    flag_value=None,
    multiple=False,
    count=False,
    allow_from_autoenv=True,
    type=None,
    help=None,
    hidden=False,
    show_choices=True,
    show_envvar=False,
    **attrs
)

Имена опций:

  • @click.option("-f", "--foo-bar"), имя параметра функции будет "foo_bar"

  • @click.option("-x"), имя "x"

  • @click.option("-f", "--filename", "dest"), имя "dest"

  • @click.option("--CamelCase"), имя "camelcase"

  • @click.option("-f", "-fb"), имя "f"

  • @click.option("--f", "--foo-bar"), имя "f"

  • @click.option("---f"), имя "_f"

Запрос значения у пользователя#

Запрос выполняется только если в опции не указано значение:

@click.command()
@click.option("--username", "-u", prompt=True)
@click.option("--password", "-p", prompt=True, hide_input=True)
@click.option("--secret", "-s", prompt=True, hide_input=True)
def cli(username, password, secret):
    pass

Параметр hide_input позволяет скрывать вводимое значение.

Переменные окружения#

@click.command()
@click.option("--username", "-u", envvar="NET_USER")
@click.option("--password", "-p", envvar="NET_PASSWORD")
@click.option("--secret", "-s", envvar="NET_SECRET")
def cli(username, password, secret):
    pass

Переменные окружения и prompt - сначала проверяется переменная окружения, потом, если ее нет, запрос у пользователя:

@click.command()
@click.option("--username", "-u", envvar="NET_USER", prompt=True)
@click.option("--password", "-p", envvar="NET_PASSWORD", prompt=True, hide_input=True)
@click.option("--secret", "-s", envvar="NET_SECRET", prompt=True, hide_input=True)
def cli(username, password, secret):
    pass

Флаг#

@click.option("--show-all", "-a", is_flag=True, help="show db content")

Подтверждение ввода#

confirmation_prompt может пригодится при запросе пароля или других критичных данных. В этом случае пароль запрашивается повторно автоматически и два введенных значения сравниваются:

@click.command()
@click.option("--username", "-u", prompt=True)
@click.option("--password", "-p", prompt=True, hide_input=True, confirmation_prompt=True)
def cli(username, password):
    print(username, password)

Примечание

Так как это распространенная задача, ввод пароля таким образом можно заменить декоратором click.password_option.