возврат кода выхода с опцией is_eager в python клик - PullRequest
0 голосов
/ 05 августа 2020

Я использую платформу щелчков. Я хочу вернуть версию и код выхода при запуске python hello.py --version. В настоящее время мой код выглядит следующим образом.

import click
def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    click.echo('Version 1.0')
    return 1
    ctx.exit()

@click.command()
@click.option('--version', is_flag=True, callback=print_version,
              expose_value=False, is_eager=True)
def hello():
    click.echo('Hello World!')

hello()
$ python hello.py --version
    Version 1.0
    Hello World!

Я ожидаю такого вывода:

$ python hello.py --version
    Version 1.0
    1

1 Ответ

1 голос
/ 05 августа 2020

Ошибка в том, что вы возвращаетесь из своей функции до вызова оператора выхода. Так что он никогда не запускается. Здесь вам не нужен оператор возврата. Этот код должен работать:

import click

def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    click.echo('Version 1.0')
    ctx.exit(0)

@click.command()
@click.option('--version', is_flag=True, callback=print_version,
              expose_value=False, is_eager=True)

def hello():
    click.echo('Hello World!')

hello()

Это выведет только Version 1.0, а затем выйдет с кодом выхода 0. Вы можете изменить код выхода, который хотите иметь, на любой в cox.exit(YOUR_EXIT_CODE), хотя вы, вероятно, захотите использовать для этого 0 в качестве кода выхода.

Если вы хотите проверить код выхода, вы можете выполнить свою программу, а затем запустите дополнительную команду в своей оболочке на основе unix, чтобы получить код выхода последней выполненной команды:

python3 FILE_NAME.py --version
echo $?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...