当前位置:网站首页>命令行参数传递库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
边栏推荐
- 移动布局(flex布局、视口标签)
- Mvcc (multi version concurrency control)
- 【TED系列】如何与内心深处的批评家相处?
- c#读取INI文件和向ini文件写入数据
- 14. Transaction processing
- Understanding of STL container
- Solutions to common problems in visualization (VII) solutions to drawing scale setting
- SAP PI/PO rfc2RESTful 发布rfc接口为RESTful示例(Proxy间接法)
- keytool: command not found
- js之DOM学习获取元素
猜你喜欢

SAP PI/PO rfc2Soap 发布rfc接口为ws示例

超级宝典&编程指南(红蓝宝书)-读书笔记

Configure NPM

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

SAP pi / PO rfc2restful publishing RFC interface is a restful example (proxy indirect method)

Implementation of MySQL persistence

Visualization Road (IX) detailed explanation of arrow class

ABAP CDS VIEW WITH ASSOCIATION示例

页面实时显示当前时间

将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
随机推荐
二叉树的深度
Judge whether the beginning and end of the string contain target parameters: startswith() and endswith() methods
C# SmoothProgressBar自定义进度条控件
redis连接出错 ERR AUTH <password> called without any password configured for the default user.
取得所有点列表中的最大值GetMaxPoint
设置了body的最大宽度,但是为什么body的背景颜色还铺满整个页面?
canvas学习第一篇
js案例之求最大值,反转数组,冒泡排序
解决在docker中部署mysql8, 密码正确但无法登陆MySQL问题
instanceof的实现原理
Hot change scheme and dynamic update strategy of mobile game
SAP PI / Po rfc2restful Publishing RFC interface as restful examples (proxy indirect)
typescript字典的使用
NodeJS(六) 子进程操作
异步的学习
Common DOS commands
Mobile game performance optimization
根据某一指定的表名、列名及列值来向前或向后N条查相关列值的SQL自定义标量值函数
url转成对象
Authorization+Token+JWT