作者:18cyl
时间:2022.4.20
本文主要是对上述文章的一些补充
一、常用参数组合
parser = argparse.ArgumentParser(description="Something about the program") # 基本上只用description 这个字段足够了 或者什么都不用
# 基本上我只用长选项可选参数
parser.add_argument('--weights', type=str, default='123456', help='initial weights') #带default的字符串参数
parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')# flag value格式则为value,无flag则为空串。不允许 单独出现flag
parser.add_argument('--bucket', nargs='?',const="",default='', help='gsutil bucket')#接受到 flag 或者无flag都为空字符串,flag value格式则为value
parser.add_argument('--epochs', type=int, default=300,help='initial epochs')#带default的int型参数
parser.add_argument('--rect', action='store_true', help='rectangular training') #接受即为true,未接收默认未False,不允许出现 flag value这种赋值格式
parser.add_argument('--rect', action='store_false', help='rectangular training') #接受即为false,未接收默认未true,不允许出现 flag value这种赋值格式
parser.add_argument('--resume', action="store_const",const=5, default=False, help='resume most recent training')# 接受到--resume则为5(const),未接收到则为False(default) 不允许出现 flag value的格式 store_true、store_false是store_const的特殊形式
# nargs ‘?’表示最多一个,‘+’表示至少一个,‘*’可有任意个,数字表示必须指定数目个
# 命令行穿多参数时格式为 flag value1 value2 value3。如果未指定type为int等则默认为str,
# nargs为?*或者大于1的数字则接受到的结果都为list。即使只接受了一个数字
parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')#带default的多数int型
parser.add_argument('--resume', nargs='?', const=1, default=False, help='resume most recent training') #接收到--resume 如果后面没有带value则存为1,如果接收到--resume value1格式则存为value1 如果没收到--resume 则为False
opt = parser.parse_args() # 3、利用解析器对象内建方法,开始解析参数,获取解析结果对象 Namespace(about='input')
print(opt)
print(opt.about) # 4、opt为解析结果对象 通过 实例变量 获取命令行传入的参数
二、使用框架
一共四步:
import argparse
parser = argparse.ArgumentParser() #1、初始化 ArgumentParser()对象 即:获解析器对象
parser.add_argument("-a","--about",type=str,help="this is a para named about") #2、利用解析器对象内建方法,添加参数解析规则 具体规则继续看下面文章
opt = parser.parse_args() # 3、利用解析器对象内建方法,开始解析参数,获取解析结果对象 Namespace(about='input')
print(opt)
print(opt.about) # 4、opt为解析结果对象 通过 实例变量 获取命令行传入的参数
看到这里有些疑问:输入的是-a参数 但是结果却只有about的值?参数前面的-|–是什么意思?如果动手实验发现print(opt.a)为什么会报错?那就接着边看边动手实验吧!如果有问题欢迎在评论区欧!
三、使用说明
- 执行python test.py -h
对各部分进行说明:位置参数和可选参数的区别在后面解释。其余的usage字段、Desctiption字段、补充说明字段中的内容都可以通过
argparse.ArgumentParser() #1、初始化
在获取解析对象的时候进行设置
# usage字段
usage: 程序名 [-h|--help] .....
# Description字段
程序功能描述
# 位置参数说明(必选)
positional arguments:
...
# 可选参数说明
optional arguments:
...
# 补充说明字段
...
参数说明: 2. 试验使用argparse.ArgumentParser() 演示一下:
import argparse
parser = argparse.ArgumentParser(prog="Test.py",usage="Good-usage",description="OK-description",epilog="Yes-epilog") #初始化 ArgumentParser()对象 即:获解析器对象
parser.add_argument("-a","--about",type=str,help="this is a para named about") #利用解析器对象内建方法,添加参数解析规则 具体规则继续看下面文章
opt = parser.parse_args() # 利用解析器对象内建方法,开始解析参数,获取解析结果对象
print(opt)
print(opt.about)
所以可以看到 usage字段,如果不改变,人家自动会显示这个程序的参数有哪些,加了不如不加。epilog、description、usage个人感觉都是起到一个说明的作用。所以可以只使用description字段,其他自动默认就好。至于prog字段,我也没看出来有什么鸟用。
- 介绍parser.add_argument()中的各个参数
- name 与 flags的区别
我的理解是 不带 -或者–的是指name,这种参数归为positional argument位置参数,带着-|–的是flags,这种形式的参数归为optional argument可选参数。flags是设计用来长短选项,具体见下图
需要注意的是:1、一条add_argument()中不可以同时出现 name和 flags(两种flags格式的参数都不行) 2、positional argument位置参数在命令行中必须对其按照顺序赋值,只可以通过相对位置来赋值而不可以使用name=value这种形式,可读性极其不友好,由于必须对其赋值,所以default默认值形同虚设,required也不能与位置参数同时使用,如果其中一个参数使用nargs=“*”或者+代表可以接受一个或者多个,零个或者多个参数的可变参数数量的设定之后,使用起来极其不友好。纯纯建议是不用
parser.add_argument("e",type=str,default="123",help="this is a positional argument") #nagrs可设置此参数可以接受多少个数字
parser.add_argument("f",type=str,default="123",help="this is a positional argument")
3、optional argument可选参数可以出现长选项中的一个或者同时出现,即使不输入也会默认为None,输入方式以 name value的格式(中间有一个空格)如果此参数接收多个参数则以name value1 value2 …的格式 具体接收多少参数以nargs这个字段控制。
import argparse
parser = argparse.ArgumentParser(description="this is a test about argparse") #初始化 ArgumentParser()对象 即:获解析器对象
parser.add_argument("-a","--about",type=str,default="123",required=False,help="this is an optional argument named about") #利用解析器对象内建方法,添加参数解析规则 具体规则继续看下面文章
parser.add_argument("-b",type=str,help="this is an optional argument")
parser.add_argument("--c",type=str,help="this is an optional argument")
opt = parser.parse_args() # 利用解析器对象内建方法,开始解析参数,获取解析结果对象
print(opt)
# print(opt.about)
值得注意的是 在程序中使用是opt.about,并不是opt.–about来获取about这个的值,如果长选项与短选项同时出现的话,opt.a(短选项)是会报错的,只能通过长选项来获取传入的参数。
4. action字段用法 当命令行中接收到带有action字段的参数时,执行的操作 比较常用的就是store_true 与store_false。即接受到该参数时将该参数的值分别置为True 或者False,若未接收到值,则默认设置为default对应的值,如果没有default字段则分别为False或者True,. 需要注意的时,当使用了store_true或者store_false的时候 不能使用flag value的格式,而只能出现一个flag(毕竟不是赋值操作)也不能与type字段同时出现。
parser.add_argument("-a","--about",action="store_true",required=False,help="this is an optional argument named about") #利用解析器对象内建方法,添加参数解析规则 具体规则继续看下面文章
parser.add_argument("-b",action="store_false",help="this is an optional argument")
parser.add_argument("--c",type=str,help="this is an optional argument")
|