官网文档
https://docs.python.org/zh-cn/3/library/argparse.html#module-argparse
https://www.jianshu.com/p/fef2d215b91d
基本使用流程
#1创建解析器
#ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息
parser = argparse.ArgumentParser(description='Process some integers.')
#2添加参数
#调用 add_argument() 方法
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
#3解析参数
#通过 parse_args() 方法解析参数
args = parser.parse_args()
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])
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)
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() 所返回对象上的属性名
使用方式
位置参数positional arguments
定位参数的,用法是不用带-就可用
import argparse
parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument("echo",help="set echo value ")
parser.add_argument("co", help="set kdjka kadj")
args = parser.parse_args()
print("echo :", args.echo)
print("co", args.co)
##输出
usage: test.py [-h] echo co
Demo of argparse
positional arguments:
echo set echo value
co set kdjka kadj
optional arguments:
-h, --help show this help message and exit
##定义了一个叫echo的参数,默认必选, 执行程序包含有参数,默认第一个参数赋值给echo ,第二个参数赋值给co, 类似于键值对
可选参数optional arguments
中文名叫可选参数,有两种方式:
一种是通过一个-来指定的短参数,如-h;
一种是通过--来指定的长参数,如--help
可选参数,也就是命令行参数是可选的
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity")
#parser.add_argument("-v", "--verbosity", help="increase output verbosity", default="vvvvv")
#如果设置默认值,执行时不提供参数他也会自行产生
parser.add_argument("-x", "--xerbosity", help="increase output verbosity")
args = parser.parse_args()
print(args)
if args.verbosity:
print("verbosity turned on")
print(args.verbosity)
##执行
$ python prog.py -v 1
$ python prog.py --verbosity 1
$ python prog.py -v
$ python test.py
Namespace(verbosity=None, xerbosity=None)
##可选参数意思是可以使用 -v 也可以使用--verbosity
指定的值会保存在verbosity 中,通过args.verbosity 获取他的值
Namespace中有两个属性(也叫成员)这里要注意个问题,当'-'和'--'同时出现的时候,系统默认后者为参数名,前者不是
required
这个参数是否一定需要设置
...
parser.add_argument('-name', required=True)
...
dest
设置参数在代码中的变量名
argparse默认的变量名是--
或-
后面的字符串,但是你也可以通过dest=xxx
来设置参数的变量名,然后在代码中用args.xxx
来获取参数的值
nargs
设置参数在使用可以提供的个数
parser.add_argument('-name', nargs=x)
其中x的候选值和含义如下:
值 含义
N 参数的绝对个数(例如:3)
'?' 0或1个参数
'*' 0或所有参数
'+' 所有,并且至少一个参数
####示例
# file-name: nargs.py
import argparse
def get_parser():
parser = argparse.ArgumentParser(
description='nargs demo')
parser.add_argument('-name', required=True, nargs='+')
return parser
if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
names = ', '.join(args.name)
print('Hello to {}'.format(names))
action='store_true'
对可选变量可以设置 action 参数。这个参数可以设置为如下值:
**store**
将输入的值保存到Namespace
实例中。(这是默认操作)**store_const**
当该可选变量在命令行被设置时,保存一个常数(需要用const
指定,否则报错)。**store_true**
当在命令行设置该可选变量时,将会给它绑定一个布尔值True
,若不设置,则该可选变量默认绑定False
。**store_false**
和store_true
表现相反,不设置绑定的是True
,显式设定后绑定False
。**append**
保存一个列表,每次设置这个变量,都会为列表添加一个值。**append_const**
每次设置时给列表添加一个常量。**count**
保存一个整数,整数的值为该参数被设置的次数。**help**
显示帮助文档并退出**version**
显示程序版本并推出
# actions_example.py
import argparse
my_parser = argparse.ArgumentParser()
my_parser.version = '1.0'
my_parser.add_argument('-a', action='store')
my_parser.add_argument('-b', action='store_const', const=42)
my_parser.add_argument('-c', action='store_true')
my_parser.add_argument('-d', action='store_false')
my_parser.add_argument('-e', action='append')
my_parser.add_argument('-f', action='append_const', const=42)
my_parser.add_argument('-g', action='count')
my_parser.add_argument('-i', action='help')
my_parser.add_argument('-j', action='version')
args = my_parser.parse_args()
print(vars(args))
https://zhuanlan.zhihu.com/p/138294710
类型 type
argparse提供了对参数类型的解析,如果类型不符合,则直接报错
#!/usr/bin/env python
# encoding: utf-8
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('x', type=int, help="the base")
args = parser.parse_args()
answer = args.x ** 2
print(answer)
##测试
$ python prog.py 2
可选值choices=[]
如果要限定某个值的取值范围
#!/usr/bin/env python
# encoding: utf-8
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)
自定义帮助信息help
parser.add_argument("square", type=int, help="display a square of a given number")
打印输出
positional arguments:
square display a square of a given number
整个程序定义帮助文档
#!/usr/bin/env python
# encoding: utf-8
import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y
if args.quiet:
print answer
elif args.verbose:
print "{} to the power {} equals {}".format(args.x, args.y, answer)
else:
print "{}^{} == {}".format(args.x, args.y, answer)
#执行
python prog.py -h
usage: prog.py [-h] [-v | -q] x y
calculate X to the power of Y
positional arguments:
x the base
y the exponent
optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet
互斥参数
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
# -v 和-q
参数默认值
#!/usr/bin/env python
# encoding: utf-8
import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
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], default=1,
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)
设置外部参数文件的前缀字符
当代码的命令行参数非常长时,把它们预先存放到外部文件中,运行程序时直接加载该文件是个好主意。argparse
通过设置 from_file_prefix_chars
支持这一操作。
# fromfile_example.py
import argparse
my_parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
my_parser.add_argument('a', help='a first argument')
my_parser.add_argument('b', help='a second argument')
my_parser.add_argument('c', help='a third argument')
my_parser.add_argument('d', help='a fourth argument')
my_parser.add_argument('e', help='a fifth argument')
my_parser.add_argument('-v', '--verbose', action='store_true', help='an optional argument')
args = my_parser.parse_args()
print('If you read this line it means that you have provided all the parameters')
创建一个 args.txt
,包含所有必要的参数,每个参数占一行
first
second
third
fourth
fifth
执行
$ python fromfile_example.py @args.txt