Jusene's Blog

Python argparse参数解析

字数统计: 883阅读时长: 4 min
2018/04/29 Share

argparse

argparse是python内置的用于命令选项与参数解析的模块,通过在程序中定义好的需要的参数将从sys.argv中解析出这些参数,并自动生成帮助和使用信息。

argparse使用

  • 创建ArgumentParser()对象
  • 调用add_argument()方法添加参数
  • 使用parse_args()解析添加的参数

创建解释器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)

  • prog: 程序名,在help信息中描述程序的名称
  • usage: 描述程序用途的字符串
  • description: help信息前显示的信息
  • epilog: help信息之后显示的信息
  • parents: 由ArgumentParser对象组成列表,它们的arguments选项会被包含新的ArgumenetParser对象中
  • formatter_class: help信息输出的格式,为了美观
  • prefix_chars: 参数前缀,默认为‘-’
  • fromfile_prefix_chars: 前缀字符,放在文件名之前
    1
    with open('args.txt','w') as fp:
    2
        fp.write('-f\nbar')
    3
    parser=argparse.ArgumentParser(fromfile_prefix_chars='@')
    4
    parser.add_argument('-f')
    5
    parser.parse_args(['@args.txt'])
    当参数过多的时候可以从文件中读入
  • conflict_handler:解决冲突的策略,默认情况下冲突会发生错误
  • argument_default:(default: None)设置一个全局的选项的缺省值,一般每个选项单独设置
  • add_help :是否增加-h/-help选项 (默认为True),一般help信息都是必须的。设为False时,help信息里面不再显示-h –help信息

add_argument()添加参数选项:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

  • name or flags:参数有两种,可选参数和位置参数

1.添加可选参数

1
parser.add_argument('-f','--foo')

2.添加位置参数

1
parser.add_argument('bar')

example:

1
parser = argparse.ArgumentParser()
2
parser.add_argument('name')
3
parser.add_argument('-a','--age')
4
parser.parse_args(['xiaoming'])
5
parser.parse_args(['jusene','-a','123'])
  • action: 默认为store

1.store_const: 值存放在const中

1
parser = argparse.ArgumentParser()
2
parser.add_argument('--foo',action='store_const',const=42)
3
parser.parse_args(['--foo'])

2.store_true和store_false: 值存为True和False

1
parser = argparser.ArgumentParser()
2
parser.add_argument('-x',action='store_true')
3
parser.add_argument('-y',action='store_false')
4
parser.add_argument('-z',action='store_false')
5
parser.parse_args('-x -y'.split())

3.append: 存为列表,可以有多个参数

1
parser = argparse.ArgumentParser()
2
parser.add_argument('-a',action='append')
3
parser.parse_args('-a 1 -a 2'.split())

4.append_const: 存为列表,会根据const关键参数进行添加

1
parser = argparse.ArgumentParser()
2
parser.add_argument('-s',dest='digist',action='append_const',const='test')
3
parser.parse_args('-s -s'.split())

5.count: 统计参数出现的次数

1
parser = argparser.ArgumentParser()
2
parser.add_argument('-c'.'--count',action='count')
3
parser.parse_args('-cccc'.split())

6.version: 版本

1
parser = argparse.ArgumentParser()
2
parser.add_argument('--version',action='version',version='version 2.0')
3
parser.parser_args(['--version'])
  • nargs: 参数的数量

1.值可以为整数N(N个),*(任意多个,可以为0个),+(1个或多个),有点像正则

1
parser = argpar.ArgumentParser()
2
parser.add_argument('-x',nargs="*")
3
parser.add_argument('-y',nargs="+")
4
parser.add_argument('-z',nargs=2)
5
parser.parse_args(['-x 1 2 3 -y 1 -z 2'])

2.值为?时,首先从命令行获得参数,如果没有参数,则从const中取值,如果没有选项,则从default中取值

1
parser = argparse.ArgumentParser()
2
parser.add_argument('-x',nargs='?',const='const',default='default')
  • const: 保存一个常量
  • default: 默认值
  • type: 参数类型,默认为str
  • choices: 设置参数值的范围,如果choices中的类型不是字符串,记得指定type
  • required: 该选项是否必选,默认为True
  • dest: 参数名
CATALOG
  1. 1. argparse
  2. 2. argparse使用