argparse是python用于解析命令行参数和选项的标准模块。适用于代码需要频繁地修改参数的情况
使用argparse一共分为四步:
import argparse
parser = argparse.ArgumentParser()
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)
prog - 程序的名称(默认:sys.argv[0],即.py文件名),若自定义则为自定义名称
usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description - 在参数帮助文档之前显示的文本(默认值:无)
epilog - 在参数帮助文档之后显示的文本(默认值:无)
parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
formatter_class - 用于自定义帮助文档输出格式的类
prefix_chars - 可选参数的前缀字符集合(默认值:’-’)
fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)
argument_default - 参数的全局默认值(默认值: None)
conflict_handler - 解决冲突选项的策略(通常是不必要的)
add_help - 为解析器添加一个 -h/–help 选项(默认值: True)
allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
parser.add_argument()
add_argument参数详解:
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags:是必须的参数,该参数接受选项参数或者是位置参数(一串文件名)
>>> parser.add_argument('-f', '--foo') #选项参数
>>> parser.add_argument('bar') #位置参数
action:当参数在命令行中出现时使用的动作基本类型
取值 :store_true/store_false
store_true:
import argparse
# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似",
epilog="额外说明")
#action
#取值: store_true/store_false
parser.add_argument("-a", action="store_true")
parser.add_argument("-b", action="store_false")
#取值: store_true/store_fals
parser.add_argument("-c", action='store_const',const=10)
#取值:append
parser.add_argument("-d", action='append')
nargs: 命令行参数应当消耗的数目
注:取值可用正则表达式通配符:
*: 表示只接收1个参数
+:表示接收1一个或多个参数
?:接受1个或者不需要参数
import argparse
# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似",
epilog="额外说明")
#narge
# 添加一个接收参数 -n, 并且该参数还必须要接收2个值,会放在一个数组中,其中nargs等于几,就表示要接受几个参数
# nargs = "?" : 表示只接收1个参数,正则表达式的写法
# nargs = "+" : 表示接收1一个或多个参数
# nargs = "*" : 表示接收0个或者多个参数
parser.add_argument("-f", "--name", nargs=2)
parser.add_argument("-g", nargs="?")
parser.add_argument("-j", nargs="+")
parser.add_argument("-i", nargs="*")
# 获取对应的参数的值
args = parser.parse_args()
default: 当参数需要默认值时,由这个参数指定,默认为None,当default=argparse.SUPPRESS时,不使用任何值。
parser.add_argument('-k',default=argparse.SUPPRESS)
parser.add_argument('-l',default="5")
const: 当参数需要默认值时
type: 命令行参数应当被转换成的,传入值必须与类型匹配
#type
parser.add_argument('-m',type=int)
#运行结果
(venv) Joy-iMac:projiecex Joy$ python argparse_exe.py -m "aaa"
usage: 这是功能描述模块
testname: error: argument -m: invalid int value: 'aaa'
choices: 如有choices选项,则该指令的值只能是choices中的一个
>>> parser.add_argument('-u',type=int,choices=[1,3,5])
>>> parser.parse_args('-u 3'.split())
Namespace(u=3)
>>> parser.parse_args('-u 4'.split())
usage: [-h] [-u {1,3,5}]
: error: argument -u: invalid choice: 4 (choose from 1, 3, 5)
required:该指令一定要输入
#required
parser.add_argument('-n',required=True)
#运行结果
(venv) Joy-iMac:projiecex Joy$ python argparse_exe.py
usage: 这是功能描述模块
testname: error: the following arguments are required: -n
parser.parse_args()
import math
import argparse
parser = argparse.ArgumentParser(description='Calculate volume of a cylinder')
parser.add_argument('-r', '--radius', type=int, required=True, help='Radius of cylinder')
parser.add_argument('-H', '--height', type=int, required=True, help='Height of cylinder')
args = parser.parse_args()
#使用
def cylinder_volume(radius, height):
vol = (math.pi) * (radius**2) * (height) # 体积公式
return vol
if __name__ == '__main__':
volume = cylinder_volume(args.radius, args.height)
print('Volume of Cylinder = %s' % volume)