一、序言
接下来要详细介绍的click乃是以一种你也很熟识的方式去轻松玩cmd。cmd程序流程实质上是界定主要参数与处理主要参数,而解决参数逻辑性肯定是和所界定的主要参数相关联的。那可不可以用函数公式和装饰器来达到解决主要参数逻辑界定主要参数的联系呢?而click正好便是以这样的方式来所使用的。
本系列产品文章内容默认设置应用Python3做为编译器进行介绍。
若是你依然在应用Python2,一定要注意二者之间词汇和库的应用差别哦~
二、详细介绍
click是这种以尽量少的编码、以组合方法建立优美cmd流程的Python包。它有着很高的可配置性,同时也可以开箱即用。
它致力于让撰写命令行工具的一个过程既迅速又有趣,能防止因为无法完成预想的CLIAPI所形成失落感。它有以下三个方面:
随意嵌入指令
一键生成协助
适用运行中延迟加载子指令
三、快速开始
3.1领域模型
最先界定领域模型,是不是觉得到有一些难以想象呢?
无论是argparse还是docopt,领域模型也是被放到最后,但click则是放到首先。细想一想click的这种方法才更加符合人的思想吧?无论用哪种cmd架构,大家最后关注的便是完成领域模型,其他的精打细算。
就以官方网实例为例子,来讲解click的使用方法和哲学。假定cmd流程的键入是name和count,作用是打印出特定频次的名称。
那在hello.py中,非常容易写下如下所示编码:
defhello(count,name): """SimpleprogramthatgreetsNAMEforatotalofCOUNTtimes.""" forxinrange(count): click.echo('Hello%s!'%name)
这段代码的逻辑很简单,就是循环count次,使用click.echo打印name。其中,click.echo和print的作用相似,但功能更加强大,能处理好Unicode和二进制数据的情况。
3.2定义参数
很显然,我们需要针对count和name来定义它们所对应的参数信息。
count对应为命令行选项--count,类型为数字,我们希望在不提供参数时,其默认值是1
name对应为命令行选项--name,类型为字符串,我们希望在不提供参数时,能给人提示
使用click,就可以写成下面这样:
fromclickimportclick @click.command()@click.option('--count',default=1,help='Numberofgreetings.') @click.option('--name',prompt='Yourname',help='Thepersontogreet.')defhello(count,name):...
在上面的示例中:
使用装饰器的方式,即定义了参数,又将之与处理逻辑绑定,这真是优雅。和argparse、docopt比起来,就少了一步绑定过程
使用click.command表示hello是对命令的处理
使用click.option来定义参数选项
对于--count来说,使用default来指定默认值。而由于默认值是数字,进而暗示--count选项的类型为数字
对于--name来说,使用prompt来指定未输入该选项时的提示语
使用help来指定帮助信息
不论是装饰器的方式、还是各种默认行为,click都是像它的介绍所说的那样,让人尽可能少地编写代码,让整个过程变得快速而有趣。
3.3代码梳理
使用click的方式非常简单,我们将上文的代码汇总下,以有一个更清晰的认识:
#hello.py importclick @click.command() @click.option('--count',default=1,help='Numberofgreetings.') @click.option('--name',prompt='Yourname', help='Thepersontogreet.') defhello(count,name): """SimpleprogramthatgreetsNAMEforatotalofCOUNTtimes.""" forxinrange(count): click.echo('Hello%s!'%name) if__name__=='__main__': hello()
若我们指定次数和名字:
$python3hello.py--count2--nameEric HelloEric! HelloEric! 若我们什么都不指定,则会提示输入名字,并默认输出一次: $python3hello.py Yourname:Eric HelloEric! 我们还可以通过--help参数查看自动生成的帮助信息: Usage:hello.py[OPTIONS] SimpleprogramthatgreetsNAMEforatotalofCOUNTtimes. Options: --countINTEGERNumberofgreetings. --nameTEXTThepersontogreet. --helpShowthismessageandexit.
四、小结
click的思路非常简单,定义处理函数,通过它的装饰器来定义参数。使用装饰器的绝妙之处就在于把定义和绑定这两个步骤合为一个步骤,使得整个过程变得如丝般顺滑。
综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128800.html
摘要:如果设置为,命令将激活模式,执行会启用交互式调试器和代码自动重载。也可以通过变量单独控制,表示启用,表示禁用通过设置环境变量略通过设置环境变量略自定义命令命令基于库实现。 应用发现 flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置。不同平台设置方式有所不同。 Unix Bash (Linux, Mac, etc.): $ ex...
摘要:的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言。基本操作方法除了跨平台的还有平台特定的,比如安卓平台苹果平台平台这里我们来详细说说这些模块。 ...
摘要:首先,我们必须声明自定义指令的名称。这基本上注册了一个名为的全局自定义指令接下来,我们使用一些参数添加函数,这允许我们引用元素指令绑定,获取传递给指令的值并标识使用该指令的组件。 showImg(https://segmentfault.com/img/bVbfzuo?w=828&h=838); 您是否曾想过按住按钮几秒钟才能在Vue应用程序中执行某个功能? 您是否曾想在应用程序上创建...
摘要:首先,我们必须声明自定义指令的名称。这基本上注册了一个名为的全局自定义指令接下来,我们使用一些参数添加函数,这允许我们引用元素指令绑定,获取传递给指令的值并标识使用该指令的组件。 showImg(https://segmentfault.com/img/bVbfzuo?w=828&h=838); 您是否曾想过按住按钮几秒钟才能在Vue应用程序中执行某个功能? 您是否曾想在应用程序上创建...
阅读 889·2023-01-14 11:38
阅读 833·2023-01-14 11:04
阅读 684·2023-01-14 10:48
阅读 1887·2023-01-14 10:34
阅读 891·2023-01-14 10:24
阅读 750·2023-01-14 10:18
阅读 479·2023-01-14 10:09
阅读 519·2023-01-14 10:02