argparse模块可以为py文件封装好可以选择的参数,使他们更加灵活,丰富。
argparse模块的基础语法:
- 创建ArgumentParser()解析对象 #parser = argparse.ArgumentParser()
- 使用add_argument()方法增加参数 #parser.add_argument()
- 使用parse_args()方法进行参数解析及添加参数 # args = parser.parse_args()
- 使用print_help()方法查看构建对象的详细内容 #parser.print_help()
一:argparse.ArgumentParser()方法
prog=None - 程序名,(default: sys.argv[0])
usage -描述程序的使用方法,默认主动添加
description=None, - help时显示的开始文字,默认为None
epilog=None, - help时显示的结尾文字,默认为None
parents=[], -若与其他参数的一些内容一样,可以继承,A list of ArgumentParser
formatter_class=argparse.HelpFormatter, - 自定义帮助信息的格式
prefix_chars=’-’, - 命令的前缀,默认是‘-’
fromfile_prefix_chars=None, - 命令行参数从文件中读取
argument_default=None, - 设置一个全局的选项缺省值,一般每个选项单独设置
conflict_handler=‘error’, - 定义两个add_argument中添加的选项名字发生冲突时怎么处理,默认处理是抛出异常
add_help=True - 是否增加-h/–help选项,默认是True)
二:add_argument()的方法
name or flags… - 必选,指定参数的形式,一般写两个,一个短参数,一个长参数
action - 表示值赋予键的方式,常用action = ‘store_true’,表示该选项后不需接受参数
help - 可以写帮助信息
required - 必需参数,通常-f这样的选项是可选的,但是如果required=True那么就是必须的了
type - 指定参数类型
choices - 设置参数的范围,表示该参数能接受的值只能来自某几个值候选值中,除此之外会报错
nargs - 指定这个参数后面的value有多少个,默认为1。’?‘表示可有可无 ,’+‘表示至少一个,’*'可以任意个, 数字表示必须是指定数目个 。nargs是控制位置参数和选项参数的,不能控制选项参数后面的参数数目。
dest - 设置这个选项的value解析出来后放到哪个属性中
参数分类 :
位置参数:——参数放在那里,就要对应一个参数位置。位置参数,必须传入,否则会报错。也可通过nargs参数和default参数配合,变为可传可不传参数。
选项参数:——必须通过前面是 - 的短选项或者 – 的长选项,然后后面的才算该选项的参数,当然选项后面也可以没有参数。
import argparse
parser=argparse.ArgumentParser(prog='ls',description='like-ls')
parser.add_argument('path')
args=parser.parse_args()
print(args)
parser.print_help()
#运行时不传入参数会报如下错误
usage: ls [-h] path
ls: error: the following arguments are required: path
#将path这个位置参数变为可传可不传参数
importargparse
parser=argparse.ArgumentParser(prog='ls',description='like-ls')
parser.add_argument('path',nargs='?',default='.')#nargs='?'表示path参数可传可不传,不传就用default缺省参数,传参就用传的参数
args=parser.parse_args()
print(args)
parser.print_help()
#运行时不传参就不会报错了
usage: ls [-h] [path]
like-ls
positional arguments:
path
optional arguments:
-h, --help show this help message and exit
默认情况下,选项参数后会要求在传入参数,可通过action方法设置
import argparse
parser=argparse.ArgumentParser(prog='ls',description='like-ls')
parser.add_argument('-a')
args=parser.parse_args()
print(args)
parser.print_help()
#执行结果
Namespace(a=None)
usage: ls [-h] [-a A]
like-ls
optional arguments:
-h, --help show this help message and exit
-a A #选项参数后需传入参数A
#设置action = ‘store_true’可取消选项参数后的参数,表示当传入-a选项参数时,args.a返回true,否则返回false
import argparse
parser=argparse.ArgumentParser(prog='ls',description='like-ls')
parser.add_argument('-a',action='store_true')
args=parser.parse_args()
print(args)
parser.print_help()
#执行结果
Namespace(a=False)
usage: ls [-h] [-a]
like-ls
optional arguments:
-h, --help show this help message and exit
-a
三:parse_args()的方法:
parse_args(args=None, namespace=None)
args 参数列表,一个可迭代对象。内部会把可迭代对象转换成list。如果为None则使用命令行传入参数,非None则使用args参数的可迭代对象。
importargparse
parser=argparse.ArgumentParser(prog='ls',description='like-ls')
parser.add_argument('path',nargs='?',default='.',help='pathhelp')
args=parser.parse_args(('/etc',)) #为什么'/etc'需用元组包起来,因为要求传入可迭代对象
print(args)
parser.print_help()
输出
Namespace(path='/etc')
usage: ls [-h] [path]
like-ls
positional arguments:
path path help
optional arguments:
-h, --help show this help message and exit