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