python_argparse&&click库(从命令行接收用户参数)

argparse库

01.库安装

argparse库是python自带的命令行参数解析包,不仅可以从用户命令行中获取参数,还可以自动化的输出帮助内容,使用import argparse来判断是否已经安装了这个库,如果没有,其安装的方式也非常的简单,使用pip install argparse就可以直接安装。

02.创建参数解析对象

在使用前,首先需要创建一个参数的解析器,在显示help时就会显示出他的描述,当然,括号中的参数可有可无。

parse = argparse.ArgumentParser(description='description')

这样就生成了一个名为parse的解析对象。

03.添加参数列表

为这个对象添加一些参数,使用add_argument方法,其原型为:

parse.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
04.选项name\flag\action\default\type\help

第一个参数为接收用户数输入的标志,例如--path-y等,其后紧跟的选项为可选项,具体为:

parse.add_argument('-y',action = 'store_false/store_ture',default = False,help = 'this is help')

这句话中的参数-y存在时,表示了action中的false或true,当不存在时,则为默认值False,这类参数类似于一个判断,yes or no,还有一类参数可以设置获取到参数的类型,int、str等,这类型的参数会将用户输入保存下来,用于最后的操作,例如;

parse.add_argument('-path',type=str,default ='c:',help = 'cd to this path')

上面设置的两个参数都需要使用parse.parse_args()解析,解析后将其赋值给一个变量,这个变量将会保存用户输入的所有参数内容,具体用法为:

args = parse.parse_args()
print args

执行时可以看到我们的输入都被储存了下来。


运行结果

使用-h获取帮助列表。


帮助列表

通过args.path、args.y可以分别对这两个值操作,完成我们需要的目标。
05.选项nargs\const\choices\required\metavar\dest

平常我们需要用到的就是上面那几个参数,以下内容只做了解。

  • nargs表示这个参数接收几个对象,例如一个参数需要多个输入,则要指定nargs,其中通配符?表示1个或0个参数,*表示0个或多个,+表示一个或多个。
nargs = '+'
nargs = '?'
nargs = '*'
  • choices表示这个参数的选项,只能从其中挑选,例如参数为性别,则只能从man、woman中选择。
add_argument('-sex',type=str,default = 'man',choices = ['man','woman'],help = 'choice your sex')
  • const与nargs为?必须同时出现,且当选择了选项没有参数时会默认选择const中的内容,而没有选项时才会取default中的内容。当没有nargs时会出现ValueError: nargs must be '?' to supply const的错误。
  • required表示这个参数必须存在,如果设置为required但没有包含这个参数的内容时会提示:error: argument -sex is required
  • metavar将写入的内容扩充到参数的帮助信息中,在显示help时也会显示。
  • dest表示将获取到的参数存放进哪个变量中,例如dest='Ysex',表示可以使用args.Ysex访问这个参数,如果不指定,则会默认使用名字来代替。
add_argument('-sex',type=str,default = 'man',choices = ['man','woman'],help = 'choice your sex',dest='Ysex')
#如不指定dest将使用-sex中的sex默认存放,args.sex访问。

click库

01.click库安装

click是第三方开发的参数获取库,可以快捷的把一个函数修饰为命令行,相较于python自带的argparse来说,功能更加强大,也更随心所欲点,可以使用pip install click安装。

02.click基本使用

click的命令行分为选项和参数两个部分,选项为option,参数为argument,其中option功能较多,封装了许多特殊的功能,其表示可选项,这个参数可有可无;而argument表示了必须存在的参数,按照顺序依次存入相应的变量中,直接使用xxx访问。

03.修饰一个函数为命令行

在代码中使用@click.command()将下方的函数改变为命令行,这样的方式显然更加简单。

import click
@click.command()
@click.option('-name',type = str , default = 'wwwaxlz' , help = 'input your name' , prompt  = 'your name:')
def myfunc(name):
      click.echo(name)
myfunc()

上面的代码中是option的简单用法,包括了type、default、help和prompt,其中default和help与argparse相同。不再介绍,而type方面扩展了许多的新类型,丰富了第三方库,prompt则是当这个选项没有输入时做出的提示,下面先看type的内容:
除了int / string / float 等共同的类型外,click含有许多新的类型,例如:

  • click.Choice(['yes','no'])表示只可以在俩个内容中选择,注意'C'大写,否则会出现has no attribute 'choice'的错误
  • click.option('-password',hide_input=True, confirmation_prompt=True,prompt = 'input your pwd' , help = 'password')hide_input表示输入时将会隐藏输入的内容,而confirmation表示输入之后是否需要确认,类似于其他场景中的密码输入。对于密码click有专门的选项,@click.password_option()可以直接完成上面的内容。
  • 作为第三方的库,当然在某些方面是很方便的,例如:
import click
@click.command()
@click.option('-filen',type = click.File('rb'),prompt = 'input your filename',help = 'open file')
def myfunc(filen):
      print filen.read()
myfunc()
  • 这时将使用rb方法打开一个文件,如果一开始用户没有指定这个参数,将会提醒用户输入。

    运行结果

  • 如果只需要这个文件名称或路径名称时,可以使用:

import click
@click.command()
@click.option('-filen',type = click.Path(exists=True),prompt = 'input your filename',help = 'open file')
def myfunc(filen):
      clcik.echo(filen)
myfunc()
  • 添加exists=True可以直接判断路径是否存在。
    运行结果

04.click.argument添加固定参数

使用argument添加参数时,参数必须存在,且没有prompt、help等选项,当没有选中这个参数时,会直接爆出错误:Error: Missing argument "_FILEN".
既然不是选项类的参数,那么他的取值完全依靠申明的顺序,第一个申明谁,第一个参数就是谁。
例如:

@click.command()
@click.argument('filen',type = click.Path(exists=True))
@click.argument('myn',type = str , default = 'sks')
def myfunc(filen,myn):
      print filen,myn

而提供的参数名称必须与函数形参取名相同,这样才能正确的获取用户的命令行输入。


执行结果

显然这种方式没有选项类可完成的动作多,但是简单的脚本中完全可以使用,极简式。

总结

argparse与click完成相同的功能,但一个是python自带的库,一个是大神编写的第三方库,argparse可以为整个脚本编写参数,不需要多次申明,而click为某个函数提供参数,用户的输入都被函数获取,每个函数都需要首先注册command,在特殊的方面封装的也比较完整,值得学习!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354