『Python』解析命令行参数之argparse

一般使用 argparse 模块来解析命令行传来的参数,argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数。它的使用也比较简单。

1. 基本使用

import argparse

parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument('-u', '--username', dest='username', type=str, default='亚索', help='用户名')
parser.add_argument('-s', '--sex', dest='sex', type=str, choices=['男', '女'], default='男', help='性别')
parser.add_argument('-a', '--age', dest='age', type=int, help='年龄')

args = parser.parse_args()
print(args)

username = args.username
sex = args.sex
age = args.age
print(username, sex, age)

输出结果:

XXXXXXX> python main.py -a 25
Namespace(age=25, sex='男', username='亚索')
亚索 男 25

XXXXXXX> python main.py -u 瑞雯 -s 女 -a 16
Namespace(age=16, sex='女', username='瑞雯')
瑞雯 女 16

在上面的代码中,我们先导入了argparse这个包,然后包中的ArgumentParser类生成一个parser对象(好多博客中把这个叫做参数解析器),其中的description描述这个参数解析器是干什么的,当我们在命令行显示帮助信息的时候会看到 description描述的信息。

接着我们通过对象的add_argument函数来增加参数。这里我们增加了两个参数usernamesexage,其中'-u','--username'表示同一个参数,default参数表示我们在运行命令时若没有提供参数,程序会将此值当做参数值。执行结果如上所示。

最后采用对象的parse_args获取解析的参数,由上图可以看到,Namespace中有两个属性(也叫成员)这里要注意个问题,当'-''--'同时出现的时候,系统默认后者为参数名,前者不是,但是在命令行输入的时候没有这个区分接下来就是打印参数信息了

当执行命令python fun_test.py -h可以查看帮助信息

XXXXX> python main.py -h
usage: main.py [-h] [-u USERNAME] [-s {
    
    男,女}] [-a AGE]

Demo of argparse

optional arguments:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        用户名
  -s {
    
    男,女}, --sex {
    
    男,女}
                        性别
  -a AGE, --age AGE     年龄

2. 参数介绍

2.1 default

没有设置值情况下的默认参数,default 表示命令行没有设置该参数的时候,程序中用什么值来代替。

2.2 required

表示这个参数是否一定需要设置,如果设置了required=True,则在实际运行的时候不设置该参数将报错

2.3 type

默认的参数类型是 str 类型,如果你的程序需要一个整数或者布尔型参数,你需要设置type=inttype=bool

2.4 choices

参数值只能从几个选项里面选择

2.5 help

在现实帮助信息的时候,help 参数的值可以给使用工具的人提供该参数是用来设置什么的说明,对于大型的项目,help 参数和很有必要的,不然使用者不太明白每个参数的含义,增大了使用难度。

2.6 dest

设置参数在代码中的变量名,argparse 默认的变量名是---后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。

2.7 nargs

设置参数在使用可以提供的个数

使用方式如下:

parser.add_argument('-name', nargs=x)

其中x的候选值和含义如下:

 值              含义
 N        参数的绝对个数(例如:3)
'?'       0 或 1 个参数
'*'       0 或所有参数
'+'       所有,并且至少一个参数

猜你喜欢

转载自blog.csdn.net/dreaming_coder/article/details/109141666