Python命令行解析argparse

文章目录

      • 1. 什么是argparse
      • 2. 如何使用argparse
        • 2.1 第一步:导入argparse库
        • 2.2 第二步:创建一个解析对象
        • 2.3 第三步:add_argument()向加入命令行参数和选项(重要)
          • 2.3.1 name or flags
          • 2.3.2 action
          • 2.3.3 nargs
          • 2.3.4 default
          • 2.3.5 const
          • 2.3.6 type
          • 2.3.7 choices
          • 2.3.8 required
        • 2.4 第四步:使用parse_args()进行解析参数
      • 3. 完整示例

1. 什么是argparse

argparse是python用于解析命令行参数和选项的标准模块。适用于代码需要频繁地修改参数的情况

2. 如何使用argparse

使用argparse一共分为四步:

2.1 第一步:导入argparse库

import argparse

2.2 第二步:创建一个解析对象

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)

2.3 第三步:add_argument()向加入命令行参数和选项(重要)

parser.add_argument()

add_argument参数详解:

ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
2.3.1 name or flags

name or flags:是必须的参数,该参数接受选项参数或者是位置参数(一串文件名)

>>> parser.add_argument('-f', '--foo')    #选项参数  
>>> parser.add_argument('bar')        #位置参数  
2.3.2 action

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') 
2.3.3 nargs

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()                        
2.3.4 default

default: 当参数需要默认值时,由这个参数指定,默认为None,当default=argparse.SUPPRESS时,不使用任何值。

parser.add_argument('-k',default=argparse.SUPPRESS)
parser.add_argument('-l',default="5")
2.3.5 const

const: 当参数需要默认值时

2.3.6 type

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'

2.3.7 choices

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)  
2.3.8 required

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

2.4 第四步:使用parse_args()进行解析参数

parser.parse_args()

3. 完整示例

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)

你可能感兴趣的:(python,python,linux,开发语言)