Argparse模块

官方document

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()返回的对象要添加的属性名称。
# 位置参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)
#输出
>python ArgparseDemo.py 123
15129
# 可选参数
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_false")
args = parser.parse_args()
if args.verbosity:
    print('verbosity turned on')
# 当有action关键词且值为store_true时,如果命令行指定了这个可选参数,args.verbosity就赋值为True,否则就为False.多指定了值就会发生错误。
#输出:
>python ArgparseDemo.py --verbosity
verbosity turned on

>python ArgparseDemo.py 12
usage: ArgparseDemo.py [-h] [--verbosity]
ArgparseDemo.py: error: unrecognized arguments: 12

简写:

#简写
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_true")
args = parser.parse_args()
if args.verbosity:
    print('verbosity turned on')


#输出
>python ArgparseDemo.py -v
verbosity turned on
#混合使用定位(位置)和可选参数

parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",type=int)
parser.add_argument("-v", "--verbosity", help="increase output verbosity",action="store_true")
args = parser.parse_args()

answer = args.square**2
if args.verbosity:
    print('the square of {} equals {}'.format(args.square, answer))
else:
    print(answer)

#输出
>python ArgparseDemo.py 4 -v
the square of 4 equals 16

>python ArgparseDemo.py 4
16
# 来看看为程序加上处理重复参数的能力会怎么样:
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

>python ArgparseDemo.py 4
16

>python ArgparseDemo.py 4 -v 1
4^2 == 16

>python ArgparseDemo.py 4 -v 2
the square of 4 equals 16

>python ArgparseDemo.py 4 -v 3
16
#出现了bug
# 我们可以通过限制--verbosity后面跟的值来修正:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

#输出
>python ArgparseDemo.py 4 -v 3
usage: ArgparseDemo.py [-h] [-v {0,1,2}] square
ArgparseDemo.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
'''现在让我们用一种更常用的方法来处理,类似CPython处理自己的参数(参考python --help):'''

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display the square of a given number")
parser.add_argument("-v", "--verbosity", action="count",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)


>python ArgparseDemo.py 4
16

>python ArgparseDemo.py 4 -v
4^2 == 16

>python ArgparseDemo.py 4 -vv
the square of 4 equals 16

>python ArgparseDemo.py 4 --verbosity --verbosity
the square of 4 equals 16

>python ArgparseDemo.py 4 -vvv
16
#最后那个输出又暴露了程序的bug

>python ArgparseDemo.py 4 -h
usage: ArgparseDemo.py [-h] [-v] square

positional arguments:
  square           display the square of a given number

optional arguments:
  -h, --help       show this help message and exit
  -v, --verbosity  increase output verbosity

'''但是不爽的是,帮助信息并没有做出有用的提示,不过可以通过修改help来改善这个问题。'''
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display the square of a given number")
parser.add_argument("-v", "--verbosity", action="count",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

#输出
>python ArgparseDemo.py 4 -vvvv
the square of 4 equals 16

>python ArgparseDemo.py 4 -v
4^2 == 16

>python ArgparseDemo.py 4
Traceback (most recent call last):
  File "ArgparseDemo.py", line 180, in <module>
    if args.verbosity >= 2:
TypeError: '>=' not supported between instances of 'NoneType' and 'int'

'''
第一个输出是正确的,修正了上个版本的问题,参数出现次数>=2时都能显示详细的信息。
第三个输出还是有问题
'''
#再来修改下:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display the square of a given number")
parser.add_argument("-v", "--verbosity", action="count",default=0,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

#输出
>python ArgparseDemo.py 4
16
如有疑问请联系我,写的不对的地方请联系我进行更改,感谢~ QQ:1968380831
原文地址:https://www.cnblogs.com/1zhangwenjing/p/7852258.html