argparse的使用记录
2018-04-13 本文已影响17人
楼上那位
# -*- coding:utf-8 -*-
import sys
import argparse
import argparse_autogen
reload(sys)
'''
parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+x')
parser.add_argument('++y')
print parser.parse_args('+x 1 ++y 2'.split())
print '+x 1 ++y 2'.split()
# Namespace(x='1', y='2')
# ['+x', '1', '++y', '2']
parser.add_argument("-f",help='-f find')
'''
parser = argparse.ArgumentParser()
# 添加位置参数
parser.add_argument('name')
# 添加可选参数
parser.add_argument('-a', '--age')
print parser.parse_args(['sunjianfeng','-a','19'])
print '不添加位置参数 >>>>>> '
# 如果有位置参数,但是不添加值,就会报错
# print parser.parse_args(['-a','100'])
print '仅仅指定位置参数,不会报错'
print parser.parse_args(['sunjianfeng'])
print '-foo'.split()
# 添加有默认参数的
parser.add_argument('-foo', action='store_const', const='Debug')
print parser.parse_args(['sun','-foo']) # 还需 显示指定 -foo
parser2 = argparse.ArgumentParser()
parser2.add_argument('x',default='default-X')
# 如果不指定参数,使用默认的参数需要 使用nargs='?'
# 值为?时,首先从命令行获得参数,如果有-y后面没加参数,则从const中取值,如果没有-y,则从default中取值
parser2.add_argument('y', nargs='?', const='cont_v',default='Default-Y')
print parser2.parse_args('1'.split()) # Namespace(x='1', y='Default-Y')
# choices 指定参数的取值范围,如果不是字符串需要制定type required :该选项是否必选,默认为True
parser2.add_argument('-c', type=int, choices=range(1, 40000),dest='content')
result = parser2.parse_args(['100', '-c', '10000'])
print result
# Namespace(x='100', y='Default-Y', 参数名c=10000)
print result.x
print result.y
print result.content
def cmd():
args = argparse.ArgumentParser(description='Personal Information ', epilog='Information end ')
# 必写属性,第一位
args.add_argument("name", type=str, help="Your name")
# 必写属性,第二位
args.add_argument("birth", type=str, help="birthday")
# 可选属性,默认为None
args.add_argument("-r", '--race', type=str, dest="race", help=u"民族")
# 可选属性,默认为0,范围必须在0~150
args.add_argument("-a", "--age", type=int, dest="age", help="Your age", default=0, choices=range(99))
# 可选属性,默认为male
args.add_argument('-s', "--sex", type=str, dest="sex", help='Your sex', default='male', choices=['male', 'female'])
# 可选属性,默认为None,-p后可接多个参数
args.add_argument("-p", "--parent", type=str, dest='parent', help="Your parent", default="None", nargs='*')
# 可选属性,默认为None,-o后可接多个参数
args.add_argument("-o", "--other", type=str, dest='other', help="other Information", required=False, nargs='*')
args = args.parse_args() # 返回一个命名空间,如果想要使用变量,可用args.attr
print "argparse.args=", args, type(args)
print 'name = %s' % args.name
d = args.__dict__
for key, value in d.iteritems():
print '%s = %s' % (key, value)
if __name__=='__main__':
cmd()
使用
python2.7 parse.py myName 1998.02.04
argparse.args= Namespace(age=0, birth='1998.02.04', name='myName', other=None, parent='None', race=None, sex='male') <class 'argparse.Namespace'>
name = myName
name = myName
parent = None
age = 0
sex = male
race = None
birth = 1998.02.04
other = None
针对必选参数无需指定具体的名称,按照顺序就行,可选参数需要 指定,例如: -o ./build/Ipa