Click

引言

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

  1. 基础部分
import click
@click.group()
def cli():
   pass
@click.command()
def initdb():
   click.echo('Initialized the database')
@click.command()
def dropdb():
   click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)
cli()

注释与说明:

  • 将上述代码保存为文件AA.py ,在终端执行命令python AA.py initdb或者在终端执行命令python AA.py dropdb都可以分别正确的执行initdb和dropdb两个命令。
  • 这种方法不可同时执行。如果希望同时执行两个命令,修改如下:
import click
@click.group()
def cli():
   print("---")
   pass
@cli.group()
def initdb():
   click.echo('Initialized the database')
@initdb.command()
def dropdb():
   click.echo('Dropped the database')
cli()

说明与注释:

  • 将上述代码保存为文件BB.py ,在终端执行命令python BB.py initdb dropdb
  • 修改AA.py中@click.command()为@cli.command(),依前面方法依然可以执行,但是如果修改BB.py中@cli.group()为@click.group()、@click.command()或者@cli.command()依旧无法执行
  1. 中级应用部分
具体代码部分
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的基本功能

例子

import click

def seed():
	print("seed")

@click.group()
def main():
	print("2222")
	seed()
	pass

@main.command()
def train():
	print("3333")
	import train
	print('Starting Training')
	train.main()

@main.command()
def test():
	print("4444")
	import test
	print('Starting Testing')
	test.main()


@main.command()
def genUnigram():
	print("5555")

if __name__ == "__main__":
	print("1111")
	main()

python main genunigram

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值