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的基本功能