【小知识】argparse --- 命令行选项、参数和子命令解析器详解
创始人
2025-05-29 20:41:32

文章目录

  • 一、argparse简介
  • 二、说明
    • 1.参考示例
    • 2.add_argument参数
      • 2.1 name_or_flags
      • 2.2 action、default
      • 2.3 nargs
      • 2.4 type
      • 2.5 choices
      • 2.6 metavar
      • 2.7 dest
  • 三、总结

一、argparse简介

argparse模块提供了非常方便的命令行参数解析功能,能够大大简化命令行程序的开发。
现在的大型项目中都会运用argparse来管理项目中涉及的参数,在使用命令行时更好地定义模型参数。


搜索得到的参数解释都不是很清楚所以做个总结。


argparse定义四个步骤:
1.导入argparse包 ——import argparse
2.创建一个命令行解析器对象 ——创建 ArgumentParser() 对象
3.给解析器添加命令行参数 ——调用add_argument() 方法添加参数
4.解析命令行的参数 ——使用 parse_args() 解析添加的参数

二、说明

1.参考示例

现有一个scratch.py的文件,使用命令行执行它。

import argparse# 创建 ArgumentParser()对象
parser = argparse.ArgumentParser(description='Process some integers.')  # description简单说明命令行参数的作用# 调用add_argument() 方法添加参数
parser.add_argument("dataset", help="discribe dataset")
parser.add_argument("--big", action="store_const", default=0, const=999, help="discribe big")# 使用 parse_args() 解析添加的参数
args = parser.parse_args()# 调用dataset参数
print(args.dataset)
# 输出coco

在这里插入图片描述

2.add_argument参数

2.1 name_or_flags

name_or_flag参数是一个命名(参数名),例如 dataset -dataset, --dataset。如果同时传入-d--dataset,传参时任选一种即可。两者是等价的,只是在语法上稍有不同。当我们需要快速输入多个参数时,使用-d--dataset更快速。相当于-d--dataset的简写。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')  # 
parser.add_argument("-d", "--dataset", help="discribe dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述
如果定义的是dataset,则表示位置参数,用户在命令行中输入参数时,需要按照定义时的顺序输入且不用输入参数名。如下所示,按照name、age顺序传入参数值。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')  # 
parser.add_argument("name", help="discribe name")
parser.add_argument("age", help="discribe age")
args = parser.parse_args()
# 打印参数值
print(args.name,args.age)

在这里插入图片描述

2.2 action、default

default参数表示如果在命令行中没有输入参数值的话就会调用default的默认值。如下所示,第一行命令没有传入is_action,所以其默认值是False
action参数表示如果在命令行中该参数名被找到时触发的操作或行为。比如is_action 参数定义了action="store_true",那么只要在命令行中出现了该参数,那么is_action 的值就会被设置为True
如下图第二行的命令所示,出现了--is_action 所以结果输出为True
同理,action="store_False"表示解析到了/出现了该参数就设置为Fasle

import argparseparser = argparse.ArgumentParser(description='Process some integers.')  
parser.add_argument("--is_action",default=False, action="store_true", help="discribe is_action")
args = parser.parse_args()
print(args.is_action)

在这里插入图片描述

如果action="store_const"表示解析到了/出现了该参数就设置为const,其中const为我们定义在action后的const参数值。如下所示:指定const=9999

parser.add_argument("--is_action",default=False, action="store_const",const=9999, help="discribe is_action")

在这里插入图片描述

2.3 nargs

nargs参数用于指定命令行参数的个数,它决定了参数的输入方式和解析方式。如下图所示,指定nargs=3,即--ls需要传入3个值否者会报错。传入的3个值组成一个列表赋值给--ls

import argparseparser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("--ls", nargs=3)
args = parser.parse_args()
print(args.ls)

在这里插入图片描述
nargs参数的取值可以为以下几种:

N(例如3):参数接受 N 个值。
?:参数可以接受 0 个或 1 个值。
*:参数可以接受任意个数的值,存储为列表。
+:参数可以接受至少一个值,存储为列表。

示例:

import argparseparser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("--ls", nargs="*")
args = parser.parse_args()
print(args.ls)

在这里插入图片描述

2.4 type

type参数用于指定命令行参数的类型。在解析命令行参数时,argparse会将字符串类型的参数转换为指定的类型。下面是一些常见的type参数值:

str:字符串类型,这是默认值。
int:整数类型。
float:浮点数类型。
bool:布尔类型,接受True或False。
list:列表类型。


示例:指定转换为int类型,传入--dataset 为coco时报错,因为coco不能转换为int类型。传入--dataset 为字符串类型的"909"时,成功转换为int类型。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", type=int)
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", type=list)
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.5 choices

choice参数用于指定命令行参数的可选值。如下所示,指定--dataset只能取coco或者voc2012,否则报错。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", choices=["coco","voc2012"])
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.6 metavar

metavar当使用 python xx.py --help命令获取参数信息时,仅仅改变参数的显示名字,不改变参数的调用方式。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述
即在打印帮助信息时,可以帮助用户理解--dataset参数的作用,即它是用于指定train_dataset


仅此而已


import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", metavar="train_dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.7 dest

dest参数用于指定解析器解析命令行参数后,将其存储在哪个属性中。默认情况下,argparse将使用参数的名称作为属性的名称。例如,如果参数名称为--dataset,则解析器将创建一个名为dataset的属性,即上文中的print(args.dataset),并将解析结果存储在该属性中。如果指定了dest参数,则可以使用不同的名称存储解析结果。

注意 此时不是print(args.dataset)而是print(args.train_set),相当于重命名属性名称使其更容易理解。

import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", dest="train_set")
args = parser.parse_args()
# 注意 此时不是args.dataset而是args.train_set
print(args.train_set)

在这里插入图片描述

三、总结

更详细的文档说明请参考:
Python中文文档

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...