Параметры щелчка Python - избегайте многократного использования одного и того же параметра, если не указан параметр множественный - PullRequest
0 голосов
/ 07 июня 2018

Я использую python click для своих целей разработки.У меня есть следующая командная строка с одним параметром:

add student -n xx -n yy

код:

@click.group()
@click.version_option("Development", help="Echo version and exit")
@click.help_option(help = "Use this on subcommands for more information")
def cli():
    '''Add a student/teacher/principal'''

@cli.command()
@click.option('--name', '-n', required=True, help='Specify the name of the student')
def student(name):
    '''Add a Student'''

При использовании вышеуказанной командной строки, как я могу использоватьодин и тот же вариант несколько раз ??Я вижу, что значение для name составляет yy.Как я могу избежать принятия нескольких -n, если несколько не соответствует действительности?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете использовать несколько с твиком.Сделайте multiple=True.Примите несколько значений.И выдает ошибку, если имеется более одного элемента.

def check_multiple(ctx, param, value):
    if len(name) > 1:
        click.echo('Multiple options are not accepted!')
        ctx.abort()
@cli.command()
@click.option('--name', '-n', required=True, multiple=True, callback=check_multiple, help='Specify the name of the student')
def student(name):
    ''' '''

Поскольку у меня нет текущей настройки, приведенный выше код не тестируется;Получено из документации .

0 голосов
/ 07 июня 2018

Используйте kwargs

multiple=True

Запуск этого

import click


@click.group()
@click.version_option("Development", help="Echo version and exit")
@click.help_option(help="Use this on subcommands for more information")
def cli():
    """Add a student/teacher/principal"""


def validate_student(ctx, param, value):
    try:
        if len(value) > 1:
            raise ValueError
        else:
            return value
    except ValueError:
        raise click.BadParameter('Students should be not more than 1')


@cli.command()
@click.option('--name', '-n', required=True, multiple=True, help='Specify the name of the student',
              callback=validate_student)
def student(name):
    """Add a Student"""
    print(name)


if __name__ == "__main__":
    student()

Дает мне это

$ python3 add.py -n xx -n yy
    Usage: add.py [OPTIONS]

Error: Invalid value for "--name" / "-n": Students should be not more than 1

Process finished with exit code 0

Но передача только 1 параметра возвращает:

$ python3 add.py -n xx
('xx',)

Это задокументировано здесь: http://click.pocoo.org/5/options/#multi-value-options и здесь http://click.pocoo.org/5/options/#callbacks-for-validation

...