щелкните функцию запроса пользовательских параметров

#python #option #prompt #python-click

#python #запрос #python-click

Вопрос:

Я заметил, что запрос с использованием click принимает входные данные с конечными пробелами

 ftp_server = click.prompt("FTP Server")
  

Есть ли способ использовать пользовательскую функцию возврата, подобную этой, чтобы отклонить пробелы в конце?

 def custom_prompt(value):
    if value.strip():
        return True
    else:
        return False

ftp_server = click.prompt("FTP Server", custom_prompt)
  

Я уже использовал это:

 while not ftp_server.strip():
    ftp_server = click.prompt("FTP Server")
  

Но я ищу способ получше, потому что я не хочу использовать цикл while каждый раз, когда я использую приглашение.

Комментарии:

1. Что должна выполнять пользовательская функция возврата?

2. он не должен принимать пользовательский ввод, если он содержит конечные пробелы

3. Итак, вам нужен валидатор?

4. ДА. Я уже использовал цикл while, но я ищу способ получше

Ответ №1:

Чтобы отклонить неверный пользовательский ввод, вы можете использовать value_proc параметр to click.prompt . Средство проверки для отклонения ввода с конечными пробелами может выглядеть следующим образом:

Средство проверки запросов

 import click

def validate_no_trailing_space(value):
    if value != value.rstrip():
        raise click.UsageError("Trailing space is invalid!")
    return value

ftp_server = click.prompt("FTP Server",
                          value_proc=validate_no_trailing_space)
  

Обрезать пробелы

Вы могли бы также рассмотреть средство проверки, которое обрезает начальные и конечные пробелы, но отклоняет пробелы в имени:

 def validate_no_internal_space(value):
    value = value.strip()
    if ' ' in value:
        raise click.UsageError("Spaces are not valid here!")
    return value
  

Комментарии:

1. Это работает, и я получаю это: Ошибка: пустые входные данные не разрешены. Но как я могу удалить часть «Ошибка:»? Я хочу, чтобы отображался только мой текст

2. Error: Присущ щелчок. Вам нужно будет написать свою собственную функцию приглашения или обработать ошибку за пределами click.prompt .

3. А если я хочу скрыть ввод в случае ввода пароля?