简介
argparse是Python的一个命令行解析器
1、创建解析器 ArgumentParser
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
print(parser.print_help())
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage
help信息前显示的信息———我的argparse命令行参数用法
optional arguments:
-h, --help show this help message and exit
help信息之后显示的信息
None
prog : 脚本文件名,默认为sys.argv[0],用来在help信息中描述程序的名称
usage :描述程序用途的字符串
description :help信息前显示的信息
epilog : help信息之后显示的信息
2、添加参数选项 add_argument
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
1. name or flags : 参数有两种,可选参数和位置参数
- positional arguments - 位置参数
用法是在命令行中不用带“-”就可以用
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("echo") #位置参数
args = parser.parse_args()
print(args.echo)
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py hahaha
hahaha
- optional arguments - 可选参数
用法是在命令行中要使用横杠,其中有两种方式:
一种是通过一个"-"来指定的短参数,如"-h";
一种是通过一个"--"来指定的长参数,如"--help";
这两种方式可以同时使用或只用一种
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", "--foo", help = "这是一个f或foo命令的指令") #可选参数
#该行定义了可选参数-f 或 --foo, 通过解析后,其值保存在args.foo变量中
args = parser.parse_args()
print(args.foo)
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py -f hahaha
hahaha
(venv) E:\文档\Python\PythonTest>python argparseTest.py --foo heiheihei
heiheihei
2. action
在命令行中使用 "-f" 时,必须指定参数值,否则就会报错,有没有像 "-h" 那样,不需要指定参数值得呢,答案是有的,通过定义参数时指定action = "store_true" 即可,用法如下
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", "--foo", help = "这是一个f或foo命令的指令", action = "store_true")
args = parser.parse_args()
print(args.foo)
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py -f
True
-f 没有指定任何参数,其实存的是True或False,如果出现,则其值为True,否则为False
3. nargs : 指定参数的数量
4. const : 保存一个常量
5. default : 默认值
1. 参数的值可以为整数N(N个),*(任意个,可以为0个),+(一个或多个)
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令", nargs = "*")
parser.add_argument("-v", help = "这是一个v命令的指令", nargs = "*")
print(parser.parse_args("-f 1 2 -v 3 4 5".split()))
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f=['1', '2'], v=['3', '4', '5'])
2. 值为?时,首先从命令行获取的参数,如果有 -v 而后面没加参数,则从const中取值,如果没有 -v ,则从default中取值
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令", nargs = "?", default = "default")
parser.add_argument("-v", help = "这是一个v命令的指令", nargs = "?", const = "hahaha", default = "default")
print(parser.parse_args("-f 1 -v 2".split()))
print(parser.parse_args("-f 1 -v".split()))
print(parser.parse_args([]))
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f='1', v='2')
Namespace(f='1', v='hahaha')
Namespace(f='default', v='default')
6. type : 指定的参数类型,默认为str
7. choices : 设置参数值的范围,如果choices中的类型不是字符串,记得指定type
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令", type = int, choices = range(1, 4))
print(parser.parse_args("-f 1".split()))
print(parser.parse_args("-f 4".split()))
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f=1)
usage: my_program [options] usage
my_program: error: argument -f: invalid choice: 4 (choose from 1, 2, 3)
8. required : 可选参数在命令行中是否可以省略(仅针对可选参数)
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令", required=True)
print(parser.parse_args())
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage
my_program: error: the following arguments are required: -f
(venv) E:\文档\Python\PythonTest>python argparseTest.py -f hahaha
Namespace(f='hahaha')
9.help : 设置这个选项的帮助信息
10.metavar : 该选项默认时会把参数的名字变为大写;更改时会在帮助信息中显示指定名称
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", "--foo", help = "这是一个f命令的指令", metavar="Function")
print(parser.print_help())
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage
help信息前显示的信息———我的argparse命令行参数用法
optional arguments:
-h, --help show this help message and exit
-f Function, --foo Function
这是一个f命令的指令
help信息之后显示的信息
None
11. dest : 这个参数相当于把位置参数或可选参数关联到一个特定的新变量中
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令")
print(parser.parse_args("-f haha".split()))
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f='haha')
########################################################################################
import argparse
parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")
parser.add_argument("-f", help = "这是一个f命令的指令", dest = "foo")
print(parser.parse_args("-f haha".split()))
#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(foo='haha')