Сообщить об ошибке.

Запрос на ввод данных и подтверждение действий в сценариях

Модуль click поддерживает запрос на интерактивный ввод данных двумя разными способами:

  • Первый: это автоматический запрос на ручной ввод данных во время обработки опций и параметров, путем передачи аргумента prompt декораторам @click.option() и @click.argument().
  • Второй: это независимый запрос ввода данных позже, с использованием функции click.prompt() или ckick.confirm().
    • Функция click.prompt() запрашивает ввод данных в соответствии с типом.
    • Функция ckick.confirm() запрашивает подтверждение (yes/no).

Содержание:


Запрос на ввод данных при определении опции и/или параметра.

Если в командной строке сценария, пользователь забыл указать обязательную опцию или параметр, то можно сделать запрос на интерактивный ввода данных этой опции или параметра, вместо вывода соответствующего сообщения. Такое поведение достигается передачей аргумента prompt декораторам @click.option() и @click.argument(). Внутри, декоратор автоматически вызывает либо функцию click.prompt(), либо click.confirm().

import click

@click.command()
# передача аргумента `prompt=True` сделает
#  запрос на ввод данных, если в командной 
# строке опция не указана
@click.option('-n', '--name', prompt=True)
def test(name):
    click.echo(f"Hello {name}!")

if __name__ == '__main__':
    test()

Во время запроса данных, строка приглашения будет содержать имя опции с заглавной буквы

$ python3 test.py
# Name:

Если такое приглашение на ввод данных не устраивает, то можно передать аргументу prompt вместо значения True - строку, с необходимым текстом:

@click.command()
@click.option('-n', '--name', prompt='Enter your name please')
def test(name):
    click.echo(f"Hello {name}!")

Вывод сценария:

$ python3 test.py
# Enter your name please:

Запрос на ввод данных, из кода сценария.

Чтобы вручную запросить ввод данных пользователем, можно использовать функцию click.prompt(). По умолчанию она принимает любую строку Unicode, но можно запросить любой другой тип данных. Например, можно запросить действительное целое число:

>>> import click
>>> click.prompt('Please enter a valid integer', type=int)
# Please enter a valid integer: 25.0
# Error: '25.0' is not a valid integer.

# Please enter a valid integer: 25
# 25

Кроме того, тип будет определен автоматически, на основе аргумента default, если он передан в функцию click.prompt(). Например, следующий пример будет принимать только числа с плавающей запятой:

>>> import click
>>> click.prompt('Please enter a number', default=42.0)
# Please enter a number [42.0]: 35
# 35.0

Запрос сценария на подтверждение каких-то действий.

Для того, чтобы спросить пользователя, хочет ли он продолжить какое-то опасное действие, пригодится функция click.confirm(). По умолчанию она возвращает результат, в виде логического значения:

>>> click.confirm('Do you want to continue?')
# Do you want to continue? [y/N]: n
# False

>>> click.confirm('Do you want to continue?')
# Do you want to continue? [y/N]: y
# True

Порядок использования в блоке if/else:

if click.confirm('Do you want to continue?'):
    click.echo('Well done!')

Также, функцию можно заставить автоматически прерывать выполнение сценария, если она не возвращает True:

click.confirm('Do you want to continue?', abort=True)