Модуль 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)