一般使用 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
函数来增加参数。这里我们增加了两个参数username
、sex
和age
,其中'-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=int
或type=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 或所有参数
'+' 所有,并且至少一个参数