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)