用途
python用于解析命令行参数和选项的标准模块,内置于python,不需要安装.
使用步骤
引入模块
import argparse
创建一个解析器
使用 argparse 的第一步是创建一个 ArgumentParser 对象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。
添加参数
给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。通常,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。这些信息在 parse_args() 调用时被存储和使用。
parser.add_argument( ' ***' )
解析参数
ArgumentParser 通过 parse_args() 方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。在大多数情况下,这意味着一个简单的 Namespace 对象将从命令行解析出的属性构建:
args = parser.parse_args()
将属性赋值给args实例,即把parser中设置的所有’add_argument’给返回到args子类实例中。
最后得到的结果是一种类似于python字典的数据类型。我们可以使用 args.参数名来提取对应的参数
argparse.ArgumentParser()
参数解析:一般只选择用description
1.description - 命令行帮助的开始文字,大部分情况下,我们只会用到这个参数
2.epilog - 命令行帮助的结尾文字
3.prog - (default: sys.argv[0])程序的名字,一般不需要修改
4.prefix_chars - 命令的前缀,默认是-,例如-f/–file。
5.fromfile_prefix_chars - (default: None)如果你希望命令行参数可以从文件中读取,就可能用到。例如,如果fromfile_prefix_chars=’@’,命令行参数中有一个为”@args.txt”,args.txt的内容会作为命令行参数
6.add_help - 是否增加-h/-help选项 (default: True),一般help信息都是必须的,所以不用设置啦。
7.parents - 类型是list,如果这个parser的一些选项跟其他某些parser的选项一样,可以用parents来实现继承,例如parents=[parent_parser]
8.argument_default - (default: None)设置一个全局的选项的缺省值,使用较少
9.usage - (default: generated)如果你需要修改usage的信息(usage: PROG [-h] [–foo [FOO]] bar [bar …]),那么可以修改这个,一般不要修改。
10.conflict_handler - 不建议使用。这个在极端情况下才会用到,主要是定义两个add_argument中添加的选项的名字发生冲突时怎么处理,默认处理是抛出异常。
add_argument()
命令行参数:
ArgumentParser.add_argument(name or flags...[,action][,nargs][,const][,default]
[,type][,choices][,required][,help][,metavar][,dest])
参数解析:
选项字符串名字或列表 — name or flags
必须有的参数,主要分为以下几种类型:
1.位置参数:不带“-”或“- -”的参数,调用时必须输入,且次序与定义时相同
2.可选参数:带“-”或“- -”的参数,没有定义时,默认为None.其中‘-’表示参数的缩写,便于命令行的输入。
命令行遇到参数时的动作 — action
指定应该如何处理命令行参数,预置的操作有以下几种:
1.action=’store’ 仅仅保存参数值,为action默认值
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args('--foo 1'.split())
Namespace(foo='1')
2.action=’store_const’ 与store基本一致,但store_const只保存const关键字指定的值
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_const', const=42)
>>> parser.parse_args('--foo'.split())
Namespace(foo=42)
>>> parser.parse_args('--foo 34'.split())
usage: arg_parse.py [-h] [--foo]
arg_parse.py: error: unrecognized arguments: 34
3.action=’store_true’或’store_false’ 与store_const一致,只保存True和False
该选项使用较多,以action='store_true’为例,该选项表示只要运行时该变量有传参就将该变量设为True。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--t', help=' ', action='store_true', default=False)
config = parser.parse_args()
print(config.t)
直接运行python demo.py,输出结果False
运行python a.py --t,输出结果True [即只要有–t输入,后面无需再传其它参数,此时该变量设为True]
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(bar=False, foo=True)
4.action=’append’ 将相同参数的不同值保存在一个list中
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
5.action=’help’ 输出程序的帮助信息
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='help')
>>> parser.parse_args('--foo'.split())
usage: arg_parse.py [-h] [--foo]
optional arguments:
-h, --help show this help message and exit
--foo
6.action=’version’ 输出程序版本信息
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0
传入不同数量的参数 — nargs
nargs=’*’ 表示参数可设置零个或多个,返回列表
nargs=’+’ 表示参数可设置一个或多个 ,返回列表
nargs=’?’ 表示参数可设置零个或一个
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='+')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='?')
>>> print(args.foo)
>>> print(args.bar)
>>> print(args.baz)
python demo.py a --foo x y --bar 1 2
out:
['x', 'y']
['1', '2']
'a'
改变数据类型 — type
默认情况下,ArgumentParser对象将命令行参数保存为字符串。但通常命令行参数应该被解释为另一种类型,如 float或int。通过指定type,可以对命令行参数执行类型检查和类型转换。通用的内置类型和函数可以直接用作type参数的值:
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', nargs='+',help='传入的数字')
args = parser.parse_args()
print(args.integers)
python demo.py 1 2
out:
['1', '2']
更改参数的类型
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=int, nargs='+',help='传入的数字')
args = parser.parse_args()
print(args.integers)
python demo.py 1 2
out:
[1, 2]
默认值 — default
有的时候需要对某个参数设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='张',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()
print(args.family+args.name)
在命令行中分别输入 python demo.py 、 python demo.py --family=李
运行结果分别为
张三
和
李三
必需参数 — required
通过required可以设置该参数是否必需,仅针对可选参数。默认为False,若为True,表示必须输入。
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, help='姓')
parser.add_argument('--name', type=str, required=True, default='', help='名')
args = parser.parse_args()
print(args.family+args.name)
在命令行中输入 python demo.py --family=张,运行结果
usage: demo.py [-h] [--family FAMILY] --name NAME
demo.py: error: the following arguments are required: --name
因为可选参数name的required=True,所以必须要传入。如果我们将其更改为False,程序运行结果
张
选择参数 — choices
将命令行参数的值限定在一个范围内,超出范围则报错
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers',help='传入的数字')
parser.add_argument('--num', type=int, choices = [1,2,5])
args = parser.parse_args()
print(args.num)
执行代码 python demo.py 1 --num 5
5
执行代码 python demo.py 1 --num 6
usage: demo.py [-h] [--num {1,2,5}] integers
demo.py: error: argument --num: invalid choice: 20 (choose from 1, 2, 5)
帮助信息 — help
设置这个选项【参数】的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-s', action='store', dest='simple_value',
help='Store a simple value')
parser.add_argument('-c', action='store_const', dest='constant_value',
const='value-to-store',
help='Store a constant value')
parser.add_argument('-t', action='store_true', default=False,
dest='boolean_switch',
help=argparse.SUPPRESS)
results = parser.parse_args()
执行代码
python demo.py -h
结果显示
usage: demo.py [-h] [-s SIMPLE_VALUE] [-c] [-t]
optional arguments:
-h, --help show this help message and exit
-s SIMPLE_VALUE Store a simple value
-c Store a constant value
设置参数在代码中的变量名 — dest
argparse默认的变量名是–或-后面的字符串,但是也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
config = parser.parse_args()
print(config.foo)
运行代码python demo.py --foo 2 输出结果
Traceback (most recent call last): File "demo.py", line 160, in <module> print(config.foo) AttributeError: 'Namespace' object has no attribute 'foo'
更改输出的属性值
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
config = parser.parse_args()
print(config.bar)
运行代码python demo.py --foo 2 输出结果
2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)