Python命令行解析库argparse

python标准库推荐使用argparse模块对命令行进行解析。

创建解析器

import argparse
parser = argparse.ArgumentParser()
创建一个ArgumentParser实例对象,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 :程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称。

usage :描述程序用途的字符串。

description :help信息前的文字。

epilog :help信息之后的信息。

parents :由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中。

formatter_class :help信息输出的格式。

prefix_chars :参数前缀,默认为‘-‘。

fromfile_prefix_chars :前缀字符,放在文件名之前。

argument_default :参数的全局默认值。

conflict_handler :解决冲突的策略,默认情况下冲突会发生错误。

add_help :设为False时,help信息里面不再显示-h --help信息。

#-*- coding:utf-8 -*-
import argparse
parser = argparse.ArgumentParser()

'''
parser = argparse.ArgumentParser(prog='myprogram')
parser.print_help()
#输出=> usage: myprogram [-h]
'''

'''
parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')
parser.add_argument('--foo', nargs='?', help='foo help')
parser.add_argument('bar', nargs='+', help='bar help')
parser.print_help()
#usage :描述程序用途的字符串
'''

'''
parser = argparse.ArgumentParser(description='A foo that bars',epilog="And that's how you'd foo a bar")
parser.print_help()
#description :help信息前的文字。
#epilog :help信息之后的信息。
'''

'''
parent_parser = argparse.ArgumentParser(add_help=False)
parent_parser.add_argument('--parent', type=int)
foo_parser = argparse.ArgumentParser(parents=[parent_parser])
foo_parser.add_argument('foo')
print foo_parser.parse_args(['--parent', '2', 'XXX'])
#parents :由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中。
'''

'''
parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
parser.add_argument('+f')
parser.add_argument('++bar')
print parser.parse_args('+f X ++bar Y'.split())
#'+f X ++bar Y'.split()等价于['+f', 'X', '++bar', 'Y']
#prefix_chars :参数前缀,默认为'-'
'''

'''
#with as上下文管理器
#当参数过多时,可以将参数放到文件中读取
#例子中parser.parse_args(['-f', 'foo', '@args.txt'])解析时会从文件args.txt读取,相当于 ['-f',  'foo',  '-f',  'bar']。
with open('args.txt', 'w') as fp:
    fp.write('-f\nbar')
    #将 -f 和 bar 写入文件中
parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('-f')
print parser.parse_args(['-f', 'foo', '@args.txt'])
'''

'''
#禁止parse_args时的参数默认添加
parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
parser.add_argument('--foo')
parser.add_argument('bar', nargs='?')

print parser.parse_args(['--foo', '1', 'BAR'])

print parser.parse_args()
#argument_default :参数的全局默认值
'''

'''
#conflict_handler :解决冲突的策略,默认情况下冲突会发生错误
#正常参数冲突的时候会报ArgumentError错,设置conflict_handler='resolve'之后会自动解决冲突
parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve')
parser.add_argument('-f', '--foo', help='old foo help')
parser.add_argument('--foo', help='new foo help')
parser.print_help()
'''


添加参数选项

add_argument (name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

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=ma
name or flags :参数有两种,可选参数和位置参数。

action: 默认为store

action的参数可以为:store_const,值存放在const中、store_true和store_false,值存为True或False、append:存为列表、append_const:存为列表,会根据const关键参数进行添加、count:统计参数出现的次数、help:help信息、version:版本。

nrgs: 参数的数量

值可以为整数N(N个),*(任意多个),+(一个或更多),值为?时,首先从命令行获得参数,若没有则从const获得,然后从default获得。

const :保存一个常量

default :默认值

type :参数类型

choices :可供选择的值

required :是否必选

desk :可作为参数名


#添加可选参数
parser.add_argument('-f', '--foo')
#添加位置参数
parser.add_argument('bar')

#action: 默认为store
#store_const,值存放在const中
parser = argparse.ArgumentParser()>>> parser.add_argument('--foo', action='store_const', const=42)

#store_true和store_false,值存为True或False
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')

#append:存为列表
parser.add_argument('--foo', action='append')
parser.parse_args('--foo 1 --foo 2'.split())

#append_const:存为列表,会根据const关键参数进行添加
parser.add_argument('--str', dest='types', action='append_const', const=str)
parser.add_argument('--int', dest='types', action='append_const', const=int)

#count:统计参数出现的次数
parser.add_argument('--verbose', '-v', action='count')

#nrgs: 参数的数量
#值可以为整数N(N个),*(任意多个),+(一个或更多)
parser.add_argument('bax', nargs=5)
parser.add_argument('bay', nargs='+')
parser.add_argument('baz', nargs='*')
#值为?时,首先从命令行获得参数,若没有则从const获得,然后从default获得
parser.add_argument('--foo', nargs='?', const='c', default='d')

解析参数

#参数有几种写法
#空格分开
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x')
parser.add_argument('--foo')
print parser.parse_args('-x X'.split())
print parser.parse_args('--foo FOO'.split())

#长选项用=分开
print parser.parse_args('--boo=BOO'.split())

#短选项可以写在一起
print parser.parse_args('-zZ'.split())

#parse_args()方法的返回值为namespace,可以用vars()内建函数化为字典
parser.add_argument('--doo')
args = parser.parse_args(['--doo', 'BAR'])
print vars(args)









郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。