python Click文档- 命令和组

Commands and Groups

Click最重要的特性,就是命令行任意嵌套;通过Command和Group(即MultiCommand)实现;

回调

普通命令中,当命令执行时同时执行回调;
如果命令行只涉及一个脚本,回调就会立即执行;除非参数阻止这一行为,如--help参数;

在多命令情况下,执行子命令时同时执行回调(除非此行为被改变);

实例

import click

@click.group()
@click.option('--debug/--no-debug', default=False)
def cli(debug):
    click.echo('Debug mode is %s' % ('on' if debug else 'off'))

@cli.command()  # @cli, 不是@click,加入命令组cli
def sync():
    click.echo('Syncing')

if __name__ == '__main__':
    cli()

运行

$ python test.py --help
Usage: test.py [OPTIONS] COMMAND [ARGS]...
...

$ python test.py --debug sync

OPTIONS 传递给test.py的主命令cli;
ARGS 传递给子命令COMMAND;

传递参数

Click严格区分命令和子命令的参数;参数要跟在相应命令的后面;

--help为例

  • tool.py --help 返回主命令的帮助
  • tool.py sub --help 返回子命令的帮助
嵌套处理和上下文
修饰命令
带without command的组
自定义多命令

当需要从某个目录(插件目录)动态加载子命令时;

自定义多命令,继承自click.MultiCommand类,并实现list_commands()和get_command()

实例

import click
import os

plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')

class MyCLI(click.MultiCommand):

    def list_commands(self, ctx):
        rv = []
        for filename in os.listdir(plugin_folder):
            if filename.endswith('.py'):
                rv.append(filename[:-3])
        rv.sort()
        return rv

    def get_command(self, ctx, name):
        ns = {}
        fn = os.path.join(plugin_folder, name + '.py')
        with open(fn) as f:
            code = compile(f.read(), fn, 'exec')
            eval(code, ns, ns)
        return ns['cli']

cli = MyCLI(help='This tool\'s subcommands are loaded from a '
            'plugin folder dynamically.')

if __name__ == '__main__':
    cli()

自定义类,也可当成修饰器使用

@click.command(cls=MyCLI)
def cli():
    pass
合并多条命令
多命令链
多命令管道
覆盖默认设置
默认上下文
命令返回值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值