命令行参数传递库argparse的使用

作者:18cyl
时间:2022.4.20
参考文章:python argparse:命令行参数详解
本文主要是对上述文章的一些补充

一、常用参数组合

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)为什么会报错?那就接着边看边动手实验吧!如果有问题欢迎在评论区欧!

三、使用说明

  1. 执行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字段,我也没看出来有什么鸟用。

  1. 介绍parser.add_argument()中的各个参数
    在这里插入图片描述
  2. 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")

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中南大学苹果实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值