在python中,解析命令行参数的方法有很多种,比如sys的argv、getopt等。但比起它们,个人更偏爱argparse,因为它提供了一种更容易阅读、操作更简洁的方案。
import argparse
parser = argparse.ArgumentParser()
'''parser.add_argument(...)→像这样设置一个参数,具体设置方法见下文'''
args = parser.parse_args()
上面这段代码便是argparse的基本用法,args中保存了所有的命令行参数
参数可以分为定位参数和可选参数两种。
默认是必需的,可以类比函数中不带默认值的参数,因此调用时按顺序读入的参数与设置好的定位参数一一对应,不需要添加“-”来指示参数名称。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("hello")
args = parser.parse_args()
arg1 = args.hello
像这样便定义了一个hello参数,解析后的参数存放在了args.hello里,这里赋给了arg1。
顾名思义,可选参数不一定需要。类比函数中带默认值的参数,但这里的命令行可选参数的默认值是可以有可以没有的。
设置可选参数有两种方式:
1.短参数:用-
加上一个字母来指定,如-e
2.长参数:用--
加上一个字符串来指定,如--example
上述两种方式可以共存,即同一个参数既可以有短参数形式也可以有长参数形式。要注意的是,两种形式都有的情况下,参数对应变量名是长参数形式中的字符串。
此外,使用命令时可选参数(长or短)若没有对应参数值会报错,这时可以添加参数action="store_true"
来让程序认为该参数已出现,从而避免无参数值报错。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--example")
args = parser.parse_args()
arg1 = args.example
给可选参数添加默认值可以使用add_argument函数的default参数:
在add_argument函数的参数中增加default="default_value"
argparse支持自动类型转换。通过argparse得到的命令行参数默认为str类型,可以在add_argument()函数中添加type=类型
将参数自动转换为所需类型。例如,将上述example参数自动转换为int类型可以使用:
parser.add_argument("-e", "--example", type = int)
有时候参数的取值选择是有限制的,比如设置参数core对应运行并行程序所用的核心数,那么在四核机器上core的取值就只能为1、2、3、4。可以使用add_argument()函数的choices参数来设置:
parser.add_argument("--core", choices = [1, 2, 3, 4])
运行命令时使用-h
参数可以查看关于该命令的帮助信息,如果想要在帮助信息中更为详细地描述某个参数,add_argument()函数的help参数便派上用场。使用方法如下:
parser.add_argument("--core", choices = [1, 2, 3, 4], help="choose the number of cores which will be used to run the proguam")
除了给单个参数设置详细说明,我们还可以在帮助信息中介绍该命令的功能。在argparse.ArgumentParser()函数中添加参数description="命令功能"
即可,例如:
import argparse
parser = argparse.ArgumentParser(description="run a parallel program")
parser.add_argument("--core", choices = [1, 2, 3, 4], help="choose the number of cores which will be used to run the proguam")
args = parser.parse_args()
arg1 = args.core
有时我们需要两个不能同时出现的参数,比如以英尺为单位的长度参数inch和以厘米为单位的长度参数cm,这是我们可以使用互斥参数组来解决这问题。使用方法如下:
import argparse
parser = argparse.ArgumentParser(description="run a parallel program")
group = parser.add_mutually_exclusive_group()
group.add_argument("--inch", type = int, action="store_true")
group.add_argument("--cm", type = int, action="store_true")
parser.add_argument("--core", choices = [1, 2, 3, 4], help="choose the number of cores which will be used to run the proguam")
args = parser.parse_args()
arg1 = args.core
这样一来inch和cm两个参数便只能出现其中一个,若两者同时出现则会报错。
参考文章:《python argparse用法总结》