Click

Click

由于click库网上资料不同的版本不多,基本雷同,本篇主要介绍将官网文档基础和网上版本结合起来,记录click库的中级应用部分

具体代码部分

import click
class Bunch(dict):

    def __getattr__(self, key):
        if key in self:
            return self[key]
        raise AttributeError(key)

    def __setattr__(self, key, value):
        self[key] = value

def _packargs(func):
    from functools import wraps
    import inspect

    @wraps(func)
    def wrapped(ctx_or_args, **kargs):
        if isinstance(ctx_or_args, Bunch):
            args = ctx_or_args
        else:
            args = ctx_or_args.obj
        ignore = inspect.getargspec(func).args
        args.update({key: kargs.pop(key) for key in list(kargs)
                     if key not in ignore and key not in args})
        return func(ctx_or_args, **kargs)
    return wrapped

def packargs(func):
    import click
    return click.pass_obj(_packargs(func))

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

@cli.group()
@click.option('--arg1', type=int, default=0,required=True)
@click.option('--arg2', type=int, default=1,required=True)
@packargs
def exp(args):
    print "*"*20
    print "args1",args
    print "*"*20

@exp.command()
@click.option('--fold1', type=int, required=True, help='Fold argument')
@click.option('--fold2', type=click.Choice(['intra-arg1',
                                                    'intra-arg2']), required=True)
@packargs
def crossval(args):
    print "args:",args

if __name__ == '__main__':
    cli(obj=Bunch())

1.其中注意@exp.command处增加了命令行函数crossval和其两个命令行参数 fold1与fold2
2.如果将@exp.command注释掉或者改成@cli.group(),程序报错,根据错误就可以看出group的用法
3.在此测试程序删除或者增加代码,可以测试日常用到的click的基本功能

猜你喜欢

转载自blog.csdn.net/zz_hh_uu_/article/details/82284290
今日推荐