当前位置:网站首页>命令行参数传递库argparse的使用
命令行参数传递库argparse的使用
2022-04-23 06:28:00 【中南大学苹果实验室】
作者: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)为什么会报错?那就接着边看边动手实验吧!如果有问题欢迎在评论区欧!
三、使用说明
- 执行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")

版权声明
本文为[中南大学苹果实验室]所创,转载请带上原文链接,感谢
https://blog.csdn.net/cyl_csdn_1/article/details/124304552
边栏推荐
- 系统与软件安全研究(五)
- int a = 1存放在哪
- 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
- Mysql 索引
- Two threads print odd and even numbers interactively
- Judge whether the beginning and end of the string contain target parameters: startswith() and endswith() methods
- ABAP 从CDS VIEW 发布OData Service示例
- 'NPM' is not an internal or external command, nor is it a runnable program or batch file
- 2022.3.14 Ali written examination
- 11. Table and library management
猜你喜欢

基于NLP的软件安全研究(一)

MySQL8.0 安装/卸载 教程【Window10版】

SAP TRANSLATE使用数据对象掩码示例

The page displays the current time in real time

Implementation of MySQL persistence

Redis connection error err auth < password > called without any password configured for the default user

王者荣耀-unity学习之旅

Custom time format (yyyy-mm-dd HH: mm: SS week x)

SVG中Path Data数据简化及文件夹所有文件批量导出为图片

基于NLP的软件安全研究(二)
随机推荐
SAP Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。
反思 | Android 音视频缓存机制的系统性设计
What are the total number of all courses of Mr. Tang Xiaoyang, who is very popular in CSDN (question mark)
Authorization server (simple construction of authorization server)
Learn to use search engines
根据某一指定的表名、列名及列值来向前或向后N条查相关列值的SQL自定义标量值函数
FSM有限状态机
如何判断点是否在多边形内(包含复杂多边形或者多边形数量很多的情况)
‘npm‘不是内部或外部命令,也不是可运行的程序 或批处理文件
keytool: command not found
学会使用搜索引擎
ES6使用递归实现深拷贝
手游性能优化
移动Web(字体图标、平面转换、颜色渐变)
面经总结2
王者荣耀-unity学习之旅
斐波拉去动态规划
H5 local storage data sessionstorage, localstorage
Understanding of STL container
系统与软件安全研究(三)