Как сохранить аргументы / параметры командной строки click для справки? - PullRequest
1 голос
/ 07 февраля 2020

Новое, чтобы нажать здесь, поэтому я все еще учусь. Как сохранить аргументы / параметры клика в объекте для последующего использования в моем приложении? Я думал о создании объекта и возвращении его из функции установки, но, похоже, он не работает. Вот что я сделал:

import click
import sys


class Cfg(object):
    component = ""
    command = ""
    obj = ""


my_cfg = Cfg()


@click.command()
@click.argument('component')
@click.argument("command")
@click.argument("obj")
def set_args(component, command, obj):
    cfg = Cfg()
    if component != "optdata":
        sys.stderr.write("Invalid option")
        sys.exit(1)
    else:
        cfg.component = component
        cfg.command = command
        cfg.obj = obj

    return cfg


if __name__ == "__main__":
    app_cfg = Cfg()
    app_cfg = set_args() # Never actually completes here. 
    print("Component = ", app_cfg.component, "Command = ", app_cfg.command, "Obj = ", app_cfg.obj)

В core.py возникло какое-то исключение, которое просто выполняет sys.exit и не вызывает никакой реальной ошибки.

1 Ответ

1 голос
/ 07 февраля 2020

Ваш дизайн идет вразрез с идеей Click: вы не должны рассматривать «анализ параметров» и «выполнение работы» как два отдельных шага:

import click

@click.command()
@click.argument("component", type=click.Choice(["optdata"]))
@click.argument("command")
@click.argument("obj")
def cli(component, command, obj):
    print("Component = ", component, "Command = ", command, "Obj = ", obj)
    # put your business logic here

if __name__ == "__main__":
    cli()

Шаблон должен вызывать функция, которая обрабатывает параметры командной строки и затем заставляет эту функцию вызывать любые другие функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...