【问题标题】:python click module input for each function每个函数的python单击模块输入
【发布时间】:2020-09-17 06:20:48
【问题描述】:

我是 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

【问题讨论】:

    标签: python python-3.x command-line-interface argparse python-click


    【解决方案1】:

    在我看来,您需要根据提供给 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
    

    您似乎不需要这些选项,因为您不会根据是否传入的选项更改每个命令的行为。更多信息请参考commands and groups Click documentation

    【讨论】:

    • 是的..你是正确的命令很有帮助。但是我的问题是引用不同的,如果我在这里给你好 conn,我的程序将被执行并正确结束。但我需要那个不是结束..它将准备好从用户那里获得另一个输入。因此,基于输入的它将调用另一个函数。我认为 click.prompt 会有所帮助,但我不知道如何处理。希望你能理解。感谢您的努力。
    • 我已经用你的用例更新了我的答案。值得注意的是,这并不完全是使用命令行客户端,但这提供了一种简单的方式。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2011-10-09
    • 2022-07-26
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多