python中的的命令行传参工具argparse,简单易学,是时候像成熟的程序一样去传参啦 哈哈

在这里插入图片描述

之前跟同学交流,发现了python中自带了argparse这个工具,argparse是用于在命令行界面传参给脚本的工具。使用argparse就可以像很多linux命令或者软件一样通过-a、-b、-c这些参数选项传入我们想传的参数啦。

argparse的使用较为简单,本文就简要介绍一下argparse最常用的使用方式吧,希望能帮助到有兴趣的人,当然我也是刚学不久,若有错误也希望能指正。


argparse能做啥 + argparse运行的基础框架

或许你还不知道argparse能干啥吧,先简单看一下吧。在linux中我们最多使用的是命令行界面,也就是通过各种命令完成我们的工作和任务,比如:

ls 
# 查看当前文件夹存在的各种文件及文件夹(不包括隐藏文件)
ls -l
# 加了一个l后我们能查看的信息更多了,包括文件属性、文件权限等内容

在使用argparse后,你也能够在执行脚本时像这样传入参数给脚本内部啦,十分的方便、霸气、高大上!

接着就直接看一个最简单的argparse的例子吧:

import argparse                      
parser = argparse.ArgumentParser()   
parser.add_argument('-p')           
parser.add_argument('-o')             
args = parser.parse_args()		       
print(args.p,args.o)

# 在命令行执行的命令:python rg.py -p 'i' -o 'q'
# 执行结果为:i q

这里我将一步一步介绍每一步的目的:

  • 首先导入argparse包
  • 其次通过argparse.ArgumentParser(直译为:参数解析器)创建了一个parser对象即解析器,这个解析器能够帮助我们解析从命令行传入的参数
  • 由于有了解析器,那么此时就需要告诉解析器需要完成的任务,也就是向解析器传入参数。这里加入参数使用的命令是add_argument()
  • 在传入参数后,parser对象携带的参数可以被parse_args()命令获取到,因此这里args储存了所有被传入的参数,args是一个<class ‘argparse.Namespace’>对象
  • args由于是一个命名空间对象,其中包含的参数可以通过args.p,args.o这样的形式被获取到,这样你就可以用这些获取到的参数去完成工作或者任务啦

相信看了上面的介绍,应该已经知道argparse的作用和其基本构成啦。接下来再进一步了解一下每一步命令吧!

解析器:argparse.ArgumentParser()

使用argparse的话,第一步一定是先建立一个解析器对象,也就是argparse.ArgumentParser()对象,建立此对象是为了后一步通过add_arguement方法向解析器中传入参数。

查看官方文档,argparse.ArgumentParser()类拥有很多参数,如下:

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)

这里我就不对每个参数进行解释啦,挑几个可能用的上的解释一下吧。

在这之前,注意一下:在命令行执行python脚本时,加上 -help可以显示整个脚本中的帮助信息,即使你没有写-h也会出现的哦。

看一下上面那个脚本的help信息吧:

# 运行python .\rg.py -h 的结果:

usage: rg.py [-h] [-p P] [-o O]

optional arguments:
  -h, --help  show this help message and exit
  -p P
  -o O
  • prog:是在帮助信息中显示的程序名(有没有发现可能是programing的缩写哦)
  • description:在帮助信息中会出现的对整个程序的描述信息
  • epilog:是在帮助文档末尾显示的对程序描述的信息
  • prefix_chars:默认情况下只能使用 - 、 - - (双横线)加上字符来添加参数,prefix_chars可以修改传入参数的前缀如+

这个我就不举例子啦,可以自己尝试一下 O(∩_∩)O哈哈~

加参数:add_argument()

用于加入需要解析的参数项,其参数有:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
  • name or flags:也就是需要传入的一系列参数名(这些参数代表的都是一个参数哦!),会先识别以 - 作为前缀的,剩下的参数则会被假定为位置参数(必须严格按照位置顺序传入参数)。第一项必须是参数名
  • action:此命令规定了被传入的参数接下来将被如何处理,action有几种类型,默认是直接储存参数值的(即store),除此外还有store_true、store_false(true表示有参数输入的情况下,这里获取到的参数就是True,无参数输入就为false,而store_false刚好相反),此外还有const等
  • help:在帮助信息中会出现,便于理解命令的意思
  • choice:参数必须是choices的戴选项中的一项
  • type:定义参数类型,如int、str等
  • required:表示是否一定需要设置此参数
  • nargs:设置参数使用时可以使用的参数个数(默认为一个)

举下例子吧:

parser.add_argument('-n','--name',type=str,choices=['lily','mary','nancy'],required=True)
# 上面-n,--name都是参数名,通过不同的参数名输入的参数都是可以的,type控制name必须为字符类型,
# choice表示输入的参数必须在列表中出现,required=True表示一定要输入此参数
parser.add_argument('-a','--age',action='store_true')
# 这里表示只要此参数有输入,那这里获取到的参数就是True这个布尔值,而不是输入的值

解析:parse_args()

最后一个重要的方法,用于获取参数。

ArgumentParser.parse_args(args=None, namespace=None)

我觉得对一般的工作来说不需要手动选择要解析的某个或某些参数(也就是每个参数都需要被解析);此外,正常情况下直接将parse_args的结果赋值给一个变量(如上面例子中的args)以储存上面提到过的<class ‘argparse.Namespace’>对象即可,不需要再额外传入一个命名空间(即此处的namespace)。因此,此处我也不再解释这个方法啦!

另外,parse_args还会自动帮你检查传入的参数是否有错误,比如你设置参数类型为int型,但却传入了str型,它当然就会帮你检出错误来啦!

通过add_mutually_exclusive_group()只传入一个参数

有时候会需要添加不能同时存在的参数,parser解释器通过add_mutually_exclusive_group()能够设置一个组,此组中的参数项只能有一个被传入,否则就会报错。

看一个例子吧:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('-p')
group.add_argument('-o')
group.add_argument('-q')
args = parser.parse_args()

命令行界面输入:

python .\rg.py -p 2 -q 5
# 报错:rg.py: error: argument -q: not allowed with argument -p

叮!

由于后面的各种命令都是包含在第一个基础框架内的,只需要在基础框架内加入后面的内容即可,有需要的话自己去套用一下吧,当然还可以再去看看python的官方文档,里面写的比较全面。我就不再对每个命令都举例子啦。

最近这段时间好忙,还是要坚持呀,虽说写的不好!

参考:https://docs.python.org/zh-cn/3.7/howto/argparse.html
参考:https://docs.python.org/zh-cn/3.7/library/argparse.html#const
参考:https://blog.csdn.net/liuweiyuxiang/article/details/82918911
参考:http://vra.github.io/2017/12/02/argparse-usage/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值