[python] argparse模块

经过配置,脚本可以接受命令行选项及参数。argparse是为解析各类参数提供支持的模块,还可以生成用法帮助信息。

创建一个ArgumentParser的实例,填入一定的参数,然后可以把可选参数(optional argument)和位置参数(positional argument)都读取出来。

使用步骤
(1)import argparse 首先导入模块
(2)parser = argparse.ArgumentParser() 创建一个解析对象
(3)parser.add_argument() 向该对象中添加你要关注的命令行参数和选项
(4)parser.parse_args() 进行解析

argparse.ArgumentParser()方法参数
description - 命令行帮助的开始文字,大部分情况下,我们只会用到这个参数
epilog - 命令行帮助的结尾文字
……

add_argument()方法参数
name or flags - 指定参数的形式,一般写两个,短参数和长参数,看下面的例子"-f", "–file"
可选的选项,位置不固定,默认是可选的 
位置固定的选项,默认是必须有的
nargs - 指定这个参数后面的value有多少个,例如,我们希望使用-n 1 2 3 4,来设置n的值为[1, 2, 3, 4] #parser.add_argument("-n", "–num", nargs="+", type=int) # 这里nargs="+"表示,如果你指定了-n选项,那么-n后面至少要跟一个参数,"+"表示至少一个,"?"表示一个或0个,"*"表示0个或多个
default - 如果命令行没有出现这个选项,那么使用default指定的默认值 
type - 如果希望传进来的参数是指定的类型(例如 float, int等可以从字符串转化过来的类型),可以使用 #parser.add_argument("-x", type=int) 。
choices - 设置参数值的范围,如果choices中的类型不是字符串,记得指定type #parser.add_argument("-y", choices=['a', 'b', 'd'])
required - 通常-f这样的选项是可选的,但是如果required=True那么就是必须的了 #parser.add_argument("-z", choices=['a', 'b', 'd'], required=True)
metavar - 参数的名字,在显示 帮助信息时才用到. 
help - 设置这个选项的帮助信息
action - The basic type of action to be taken when this argument is encountered at the command line.
 

【例】opts.py内容如下,

from argparse import ArgumentParser

def main():
    parser = ArgumentParser()
    parser.add_argument("indent",type=int,help="indent for report")
    parser.add_argument("input_file",help="read data from this file")
    parser.add_argument("-f","--file",dest="filename",help="read report to this file",metavar="FILE")
    parser.add_argument("-x","--xray",help="specify xray strength factor")
    parser.add_argument("-q","--quiet",action="store_false",dest="verbose",default=True,
                        help="don't print status messages to stdout")

    args = parser.parse_args()
    print("arguments:",args)

main()

说明:

line4 创建一个ArgumentParser的实例
line5,6 添加两个位置参数indent和input_file,参数indent必须是能被解析为int类型的
说明:位置参数是指那些没有前缀字符(通常是"-")且必须给定的参数,是在全部可选参数(以前缀字符"-"开头)都解析完毕后输入的参数。

line7 添加一个可选的文件名参数,可以是"-f"或"--file"
line9 最后一个参数"-q"带有默认值(这里为True),当未给出本参数时将设为默认值。参数action = "store_false"则表示,如果给出了本参数,则会将False值存入目标变量中。
 

(1)打印帮助信息

[root@k8s-node2 ~]# python3 opts.py
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file
opts.py: error: the following arguments are required: indent, input_file
[root@k8s-node2 ~]#
[root@k8s-node2 ~]#
[root@k8s-node2 ~]# python3 opts.py -h
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file

positional arguments:
  indent                indent for report
  input_file            read data from this file

optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  read report to this file
  -x XRAY, --xray XRAY  specify xray strength factor
  -q, --quiet           don't print status messages to stdout
[root@k8s-node2 ~]#

(2)模块argparse将返回一个Namespace对象,其属性就包含了上面这些参数

下例给出参数-q,verbose设置为False(对应action="store_false")

[root@k8s-node2 ~]# python3 opts.py -x 100 -q -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=False)
[root@k8s-node2 ~]#

(3)下例未给出参数-q,verbose设置为True(对应default=True)

[root@k8s-node2 ~]# python3 opts.py -x 100 -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=True)
[root@k8s-node2 ~]#

(4)如果某个选项没有给出实参,则其值为None

例如不带可选参数 -f,则 filename=None

[root@k8s-node2 ~]# python3 opts.py -x 100 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename=None, xray='100', verbose=True)
[root@k8s-node2 ~]#

(5)未给出位置参数会报错

[root@k8s-node2 ~]# python3 opts.py -x 100 -f outfile 2
usage: opts.py [-h] [-f FILE] [-x XRAY] [-q] indent input_file
opts.py: error: the following arguments are required: input_file
[root@k8s-node2 ~]#

(6)可以用句点符号“.”获取这些参数的值。在opts.py的main() 中添加如下行

    print("indent: ",args.indent)
    print("input_file: ",args.input_file)
    print("file: ",args.filename)
    print("xray: ",args.xray)
    print("quiet: ",args.verbose)

注意:xray没有设置dest,使用xray即可;对于file和quiet已设置dest,需要使用目标变量名

[root@k8s-node2 ~]# python3 opts.py -x 100 -f outfile 2 inputdata
arguments: Namespace(indent=2, input_file='inputdata', filename='outfile', xray='100', verbose=True)
indent:  2
input_file:  inputdata
file:  outfile
xray:  100
quiet:  True
[root@k8s-node2 ~]#


参考资料:

python3中argparse模块详解 https://blog.csdn.net/qq_36653505/article/details/83788460
《Python 快速入门(第3版)》11.1.4 argparse模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值