官方文档:https://docs.python.org/3.7/library/argparse.html#the-parse-args-method
argparse模块可以让用户轻松编写命令行界面。 该程序定义了它需要的参数,argparse将指出如何解析sys.argv(一个传递给Python脚本的命令行列表)中的参数。 当用户给程序提供无效参数时,argparse模块还会自动生成帮助和使用消息并发出错误。
1、ArgumentParser类
argparse模块中所定义的最主要的类就是 argparse.ArgumentParser。其定义以及主要参数的解释如下:
class 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])
- 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)
假设Test.py的内容如下:
import argparse
parser = argparse.ArgumentParser(prog='APro',
usage='This part will tell you how to use the module.',
description='This is a ArgumentParser object.')
parser.parse_args()
其中parser为类ArgumentParser所实例化的对象,先将cmd的执行目录放在Test.py所在的路径下,然后输入python Test.py --help可以得到以下结果:
在该类中拥有两个重要的函数add_argument()和parse_args(),用来增加parser对象中的参数和返回一个有属性值得命名空间。
2、add_argument()的参数含义
首先看看add_argument()的参数以及参数的含义:
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()返回的对象要添加的属性名称。
add_argument()的参数有两种,一种是位置参数,add_argument('echo', help='this is a positional argment') 位置参数一次只能添加一个,在用命令行运行时必须要赋值。另一种是 可选参数,add_argument(['--f','--foo']) 可选参数前面需要加'--',使用时可以选择是否赋值。
action可以继承argparse.Action定制自己的action,下面是的几个常用的参数:
- 'store' - 只是保存参数的值。这是默认的动作。
- 'store_const' - 保存由const关键字参数指出的值。(注意const关键字参数默认是几乎没有帮助的None。)'store_const'动作最常用于指定某种标记的可选参数。
- 'store_true'和'store_false' - 它们是'store_const' 的特殊情形,分别用于保存值True和False。另外,它们分别会创建默认值False 和True。
- 'append' - 保存一个列表,并将每个参数值附加在列表的后面。这对于允许指定多次的选项很有帮助。
- 'append_const' - 保存一个列表,并将const关键字参数指出的值附加在列表的后面。(注意const关键字参数默认是None。)'append_const' 动作在多个参数需要保存常量到相同的列表时特别有用。
- 'count' - 计算关键字参数出现的次数。
3、parse_args()的用法
parse_args()的参数和含义:
parse_args(args=None, namespace=None)
该函数将参数字符串传递给对象,并将他们指派给相应的命名空间,Python通过该命名空间来识别创建的对象。
- args - 需要解析的字符串列表,默认来自 sys.argv。
- namespace - 一个含有所创建属性的对象,默认为一个新的对象。
args = parser.parse_args()
parser.parse_args(namespace='args')
以上两句代码所表达的含义相同,都是给所创建对象的命名空间命名为args。
4、一个例子
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
假设以上代码保存在prog.py的文件中,我们用命令行运行:python prog.py -h,可以的到一下结果
usage: prog.py [-h] [--sum] N [N ...] Process some integers. positional arguments: N an integer for the accumulator optional arguments: -h, --help show this help message and exit --sum sum the integers (default: find the max)
添加适当的参数在运行会得到其和或者最大值。
$ python prog.py 1 2 3 4 4 $ python prog.py 1 2 3 4 --sum 10