Python3--argparse模块简要使用

前言

Python3中的argparse模块,是用来做命令行参数解析的,因为optparse模块已经不再更新,所以特此来为argparse的使用做个笔记

官网是这样说明的:

3.2版后已可移除:optparse模块已弃用,将不再进行开发;该argparse模块将继续开发

optparse官方说明地址: https://docs.python.org/zh-cn/3.7/library/optparse.html

这个模块的基本使用步骤跟optparse差别不大,使用步骤如下:

import argparse # 导入模块

parser = argparse.ArgumentParser()  # 创建一个解析对象
parser.add_argument() # 添加参数
parser.parse_args() # 解析

argparse.ArgumentParse()方法有很多参数,但是最常用的就是description,

  • prog = None # 程序名,默认为sys.argv[0]。另外,如果你需要在help中使用到程序的名字,可以使用%(prog)s
  • description = None # help时显示的开始文字
  • epilog = None # help时显示的结尾文字
  • prefix_chars='-', - 命令的前缀,默认是‘-’
  • add_help=True # 是否增加-h/--help选项,默认是True)
  • usage:# 描述程序用途的字符串
  • .....

更详细的使用,查看官方文档: https://docs.python.org/zh-cn/3.7/library/argparse.html

add_argument() 方法和参数,我们实际使用来介绍:

# file-name:print_name.py
import argparse

def main():
    parser = argparse.ArgumentParser(description='Dome of argparse ')
    parser.add_argument('--name', '-n', default='Tao')

    return parser
if __name__ == '__main__':
    parser = main()
    args = parser.parse_args()
    name = args.name
    print('Hello {0}'.format(name))

上述代码执行结果:

$ python print_name.py --name dog
# 输出:    Hello dog

上面的代码中,我们首先导入了argparse模块,然后通过 argparser.ArgumentParser函数生成argparser对象 ,其中这个函数的description字段,表示在命令行显示的帮助信息时输出这个程序的描述信息,然后我们通过add_argument函数来增加参数,这里我添加了两个参数-n--name,其中有个默认值字段default是Tao。然后我们这里发现,同一个值的设定可以设置多个参数。

这里默认值的意思是,如果我们不传这个参数,那么这个参数的值默认就是Tao

$ python print_name.py
# 输出:    Hello Tao

最后我们通过argpaser对象的parser_args函数来获取所有参数args,然后通过args.name的方式得到我们设置的-name参数的值,可以看到这里argparse默认的参数名就是--name形式里面--后面的字符串 。

一 .

  • default :没有设置值情况下的默认参数

二 .

  • required :表示这个参数是否一定需要设置

如果设置了required=True,然则在实际的运用中不设置该参数,那么则会报错,

$ python print_name.py

输出如下信息

usage: print_name.py [-h] --name NAME
print_name.py: error: the following arguments are required: --name
  • type 指定参数类型,默认是str, 还有int,float等

如果你的程序需要整数运算的话,那么需要指定type=int

import argparse

def main():
    parser = argparse.ArgumentParser(description='Dome of argparse ')
    parser.add_argument('--num', type=int)

    return parser
if __name__ == '__main__':
    parser = main()
    args = parser.parse_args()
    sum = args.num
    print(1+sum)

执行结果:

python print_num.py --num 10
# 输出:11

没有指定的话,则会报错

python print_num.py --num 10
Traceback (most recent call last):
  File "print_num.py", line 13, in <module>
    print(1+sum)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • dest 设置参数在代码中的变量名

    • argparse默认的变量名是---后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值
  • choices 参数值只能从几个选项里面选择
  • help 指定参数的说明信息

    • 告诉别人这个参数有啥作用

通过代码来解释一下:

import argparse

def choices():
    parser = argparse.ArgumentParser(description='Choices Dome')
    parser.add_argument('-c', dest='choice', required=True, choices=['Tao','xiaoming'], help='Choose a person you love')

    return parser

def main():
    parser = choices()
    args = parser.parse_args()
    choice = args.choice
    print('You choices is {0}'.format(choice))
i
if __name__ == '__main__':
    main()

帮助信息的输出:

$ python print_choices.py -h

usage: print_choices.py [-h] -c {Tao,xiaoming}

Choices Dome

optional arguments:
  -h, --help         show this help message and exit
  -c {Tao,xiaoming}  Choose a person you love  # 在这里!!!

选择一个参数,结果执行如下:

$ python print_choices.py -c Tao
# 输出结果: You choices is Tao
  • nargs 命令行参数的个数,指定这个参数后面的value有多少个,默认为1.
值        含义
N      参数的绝对个数(例如:3)
'?'   0或1个参数
'*'   0或所有参数
'+'   所有,并且至少一个参数

代码实现:

import argparse

def get_parser():
    parser = argparse.ArgumentParser(description='nargs Dome')
    parser.add_argument('-n', dest='name' ,required=True, type=str, nargs='+')

    return parser

if __name__ == '__main__':
    parser = get_parser()
    args = parser.parse_args()
    names = ', '.join(args.name)
    print('Hello %s' % names)

使用如下:

$ python print_name.py -n Tao xiaoming
Hello Tao, xiaoming

关于add_argument详细参数使用如下:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义应该如何解析一个命令行参数。下面每个参数有它们自己详细的描述,简单地讲它们是:

name or flags - 选项字符串的名字或者列表,例如foo 或者-f, --foo。
action - 在命令行遇到该参数时采取的基本动作类型。
nargs - 应该读取的命令行参数数目。
const - 某些action和nargs选项要求的常数值。
default - 如果命令行中没有出现该参数时的默认值。
type - 命令行参数应该被转换成的类型。
choices - 参数可允许的值的一个容器。
required - 该命令行选项是否可以省略(只针对可选参数)。
help - 参数的简短描述。
metavar - 参数在帮助信息中的名字。
dest - 给parse_args()返回的对象要添加的属性名称。

参考文章:

本文链接:

https://www.betao.cn/archives/python3-argparse.html
1 + 6 =
快来做第一个评论的人吧~