本文共 7907 字,大约阅读时间需要 26 分钟。
看了官方文档,开篇一个例子,看得我很懵逼,如下
import argparseparser = 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))
所以这里从add_argument方法入手,结合官方文档,写一下自己的理解
ArgumentParser.add_argument(name or flags...[,action][,nargs][,const][,default][,type][,choices][,requried][,help][,metavar][,dest])
###name or flags add_argument()方法必须的参数,且位于第一个位置,判断参数是可变参数,还是位置参数,格式要求:>>>parser.add_argument('--foo','-f') #这种形式表示可变参数,前缀可根据parse.ArgumentParser()里面的prefix_char参数来定义>>>parser.add_argument('foo') #这种形式表示位置参数
自定义add_argument()中参数的帮助信息
wuxiangyu:test_all dor-pc$ cat help_argument.py #!/usr/bin/env python#coding=utf-8import argparseparser = argparse.ArgumentParser()parser.add_argument('--foo',help="this is mystyle help")parser.parse_args()dor:test_all wuxiangyu-pc$ ./help_argument.py -husage: help_argument.py [-h] [--foo FOO]optional arguments: -h, --help show this help message and exit --foo FOO this is mystyle help
默认情况下对于命令行参数是直接解析成字符串类型,type可以指定参数类型为其它
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('foo', type=int) #指定参数类型为整型>>> parser.add_argument('bar', type=open) #指定对于参数进行open操作>>> parser.parse_args('2 temp.txt'.split())Namespace(bar=<_io.TextIOWrapper name='temp.txt' encoding='UTF-8'>, foo=2)
还提供了工厂函数类型,也可以指定为自定义的函数类型
>>>parser = argparse.ArgumentParser()>>>parser.add_argument('bar',type=argparse.FileType('w'))>>>parser.parse_args(['out.txt'])Namespace(bar=<_io.TextIOWrapper name='out.txt' mode='w' encoding='UTF-8'>) #以'w'方式打开了一个名为'out.txt'的文档
>>> def perfect_square(string):... value = int(string)... sqrt = math.sqrt(value)... if sqrt != int(sqrt):... msg = "%r is not a perfect square" % string... raise argparse.ArgumentTypeError(msg)... return value...>>> parser = argparse.ArgumentParser(prog='PROG')>>> parser.add_argument('foo', type=perfect_square)>>> parser.parse_args(['9'])Namespace(foo=9)>>> parser.parse_args(['7'])usage: PROG [-h] fooPROG: error: argument foo: '7' is not a perfect square
用于界定参数的取值范围
>>> parser = argparse.ArgumentParser(prog='doors.py')>>> parser.add_argument('door', type=int, choices=range(1, 4))>>> print(parser.parse_args(['3']))Namespace(door=3)>>> parser.parse_args(['4'])usage: doors.py [-h] {1,2,3}doors.py: error: argument door: invalid choice: 4 (choose from 1, 2, 3)
使用parse_args()对参数进行解析后,一个属性对应一个参数的值,而该属性值正是dest的值,默认情况下,对于位置参数,就是位置参数的值,对于可选参数,则是去掉前缀后的值
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('bar')_StoreAction(option_strings=[], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)>>> parser.add_argument('--version')_StoreAction(option_strings=['--version'], dest='version', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
一般情况下,一个参数与一个操作参数(如:--version)关联,但nargs可以将多个参数与一个操作参数关联
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('--foo', nargs=2)>>> parser.add_argument('bar', nargs=1)>>> parser.parse_args('c --foo a b'.split())Namespace(bar=['c'], foo=['a', 'b'])
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('--foo', nargs='?', const='c', default='d')>>> parser.add_argument('bar', nargs='?', default='d')>>> parser.parse_args(['XX', '--foo', 'YY'])Namespace(bar='XX', foo='YY')>>> parser.parse_args(['XX', '--foo'])Namespace(bar='XX', foo='c')>>> parser.parse_args([])Namespace(bar='d', foo='d')
用来设置必选参数,设定后在命令行不使用会报错
>>> parser.add_argument('--foo',required=True)>>> parser.add_argument('--version 21'.split)>>> parser.parse_args('--version 21'.split())usage: [-h] --foo FOO [--version VERSION]: error: the following arguments are required: --foo
设置参数的默认值,命令行有则覆盖默认值,没有则使用默认值
官网给出的解释是:
The const argument of add_argument() is used to hold constant values that are not read from the command line but are required for the various ArgumentParser actions. The two most common uses of it are: When add_argument() is called with action='store_const' or action='append_const'. These actions add the const value to one of the attributes of the object returned by parse_args(). See the action description for examples. When add_argument() is called with option strings (like -f or --foo) and nargs='?'. This creates an optional argument that can be followed by zero or one command-line arguments. When parsing the command line, if the option string is encountered with no command-line argument following it, the value of const will be assumed instead. See the nargs description for examples. With the 'store_const' and 'append_const' actions, the const keyword argument must be given. For other actions, it defaults to None. 是针对于action中的'store_const'与'append_const'而出现。其实对于那些需要接值的参数,预先存储一个值,如果没有则取用这个值,比如
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo',action='store_const',const=42) >>> parser.add_argument('--bar',action='append_const',const='hello') >>> parser.parse_args('--foo --bar'.split()) Namespace(bar=['hello'], foo=42)
用来给ArgumenParser对象判断如何处理命令行参数支持的操作如下:
>>>parser = argparse.ArgumentParser()>>>parser.add_argument('--foo')>>>parser.parse_args('--foo 1'.split)Namespace(foo='1')
>>>parser = argparse.ArgumentParser()>>>parser.add_argument('--foo',action='store_const',const=42)>>>parser.parse_args(['--foo'])Namespace(foo=42)
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('--foo', action='store_true')>>> parser.add_argument('--bar', action='store_false')>>> parser.add_argument('--baz', action='store_false')>>> parser.parse_args('--foo --bar'.split())Namespace(foo=True, bar=False, baz=True)
>>>parser = argparse.ArgumentParser()>>>parser.add_argument('--foo',action='append')>>>parser.parse_args('--foo a --foo b --foo c'.split())Namespace(foo=['a', 'b', 'c'])
>>> parser = argparse.ArgumentParser()>>> parser.add_argument('--str', dest='types', action='append_const', const=str)>>> parser.add_argument('--int', dest='types', action='append_const', const=int)>>> parser.parse_args('--str --int'.split())Namespace(types=[, ])
>>> parser.add_argument('-v',action='count')_CountAction(option_strings=['-v'], dest='v', nargs=0, const=None, default=None, type=None, choices=None, help=None, metavar=None)>>> parser.parse_args(['-vvv'])Namespace(v=3)
>>> 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
我理解为是对在命令行所接参数的样式的示例,比如--version后面应接3位大写字母(比如YYY),则可以设定metavar='YYY',意思为此处应接三位大写字母
>>> parser.add_argument('--version',metavar='YYY')_StoreAction(option_strings=['--version'], dest='version', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar='YYY')>>> parser.add_argument('--info',metavar='XX')_StoreAction(option_strings=['--info'], dest='info', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar='XX')>>> parser.parse_args('--version HTB --info HK'.split())Namespace(info='HK', version='HTB')>>> parser.print_help()usage: [-h] [--version YYY] [--info XX]optional arguments: -h, --help show this help message and exit --version YYY --info XX
转载于:https://blog.51cto.com/dorebmoon/2338425