python ввод модуля щелчка для каждой функции - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в python, сейчас работаю над модулем Click. Поэтому я сомневаюсь, что нужно вводить данные только для основной функции cli. Но я хочу предоставить ввод для всех моих функций одну за другой. можно ли нажать? Спасибо за заранее.

@click.option('--create', default='sub', help='Create')
@click.command()
def create(create):
    click.echo('create called')
    os.system('curl http://127.0.0.1:5000/create')   
@click.option('--conn', default='in', help='connect to server')
@click.command()
def conn(conn):
    click.echo('conn called')
    os.system('curl http://127.0.0.1:5000/')

и мой setup.py

from setuptools import setup
setup(
     name="hello",
     version='0.1',
     py_modules=['hello'],
     install_requires=[
                    'Click',
     ],
     entry_points='''
     [console_scripts]
     hello=hello:cli
''',
)

Мое ожидание вывода

$ hello --conn in
  success
  hello --create sub
  success

1 Ответ

0 голосов
/ 30 мая 2020

Мне кажется, вам нужны разные команды, основанные на вводе, предоставленном вашему hello cli. По этой причине Click имеет полезное понятие группы, набора команд, которые можно вызывать.

Вы можете реорганизовать свой код следующим образом:


@click.group()
def cli():
    pass

@cli.command()
def create():
    click.echo('create called')
    os.system('curl http://127.0.0.1:5000/create')

@cli.command()
def conn():
    click.echo('conn called')
    os.system('curl http://127.0.0.1:5000/')

def main():
    value = click.prompt('Select a command to run', type=click.Choice(list(cli.commands.keys()) + ['exit']))
    while value != 'exit':
        cli.commands[value]()

if __name__ == "__main__":
    main()

, и вызовы будут :

$ hello con
$ hello create

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

...