argparse 模块详解

2023-05-16

文章目录

      • 1. argparse 模块简介
      • 2. 未使用argparse示例
      • 3. 使用argparse示例
        • 3.1 argparse简单示例
        • 3.2 argparse进阶示例
          • 3.2.1 可选参数设置
          • 3.2.2 可选参数引用名
          • 3.2.3 清除帮助中的参数名信息
          • 3.2.4 必选参数设置
          • 3.2.5 列表参数(多参数)传入设置
          • 3.2.6 互斥参数使用
          • 3.2.7 默认参数设置
      • 4. 参考文献

1. argparse 模块简介

argparse是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。基于 python 2.7 的stdlib 代码。

argparse模块使编写用户友好的命令行界面变得容易。程序定义了所需的参数,而 argparse 将找出如何从 sys.argv(命令行)中解析这些参数。argparse 模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。

2. 未使用argparse示例

一般未使用到终端命令,对于一些需要变量赋值的程序,我们往往:

  • 1、直接在程序中(或配置文件)写死。
  • 2、或者利用input在命令行多次输入 这样不易多次调试及修改运行,如下就是一个示例:
import math

def cal_vol(radius,height):
    vol = math.pi * pow(radius,2) * height
    return vol

if __name__=='__main__':
    print(cal_vol(2,4))

argparse

3. 使用argparse示例

3.1 argparse简单示例

使用argparse的主要步骤:

  • 导入argparse包;
  • 创建ArgumentParser()参数对象;
  • 调用add_argument()方法往参数对象中添加参数;
  • 使用parse_args()解析添加参数的参数对象,获得解析对象;程序的其他部分需要使用命令行参数时,用解析对象.参数获取。

如下是一个简单的示例:

import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('radius', type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('height', type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

# 计算圆柱体积
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

注:此时因未指定,所以命令行参数输入默认按顺序赋值,顺序不同会造成结果不同
在这里插入图片描述在这里插入图片描述

默认命令-h可以获取添加参数时设置的帮助信息
在这里插入图片描述

  • 命令行参数输入默认按顺序赋值,顺序不同会造成结果不同;
  • 默认命令-h可以获取添加参数时设置的帮助信息;

3.2 argparse进阶示例

add_argument()方法(定义如何解析命令行参数):
在这里插入图片描述
参数解释如下:

  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。

  • action - 命令行遇到参数时的动作,默认值是 store。

    • – store_const,表示赋值为const;
    • – append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    • – append_const,将参数规范中定义的一个值保存到一个列表;
    • – count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
  • nargs - 应该读取的命令行参数个数,可以是

    • 具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const
    • 或者是 * 号,表示 0 或多个参数;
    • 或者是 + 号表示 1 或多个参数。
  • const - action 和 nargs 所需要的常量值。

  • default - 不指定参数时的默认值。

  • type - 命令行参数应该被转换成的类型。默认是字符串类型。

  • choices - 参数可允许的值的一个容器。

  • required - 可选参数是否可以省略 (仅针对可选参数)。

  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.

  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.

  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

3.2.1 可选参数设置
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

通过在参数名前加 - -,设置为可选参数,如果未输入,则使用default默认值(若未设置default,则会默认赋值None),如下示例:
在这里插入图片描述

3.2.2 可选参数引用名
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

通过将可选参数设置引用名,可以缩短参数名,简化命令行参数输入:
在这里插入图片描述

如下:-r- -radius都可以
在这里插入图片描述
在这里插入图片描述

3.2.3 清除帮助中的参数名信息
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

如下,对比3.2.2中-h显示信息,去掉了参数名
在这里插入图片描述原因:
metavar在通过-h显示 usage
说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.。这里通过设置为空一律不显示。

3.2.4 必选参数设置
import math
import argparse  # 1、导入argpase包


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

当通过设置required=True后,无论参数是否是可选参数,都必须输入,如下示例:
在这里插入图片描述

3.2.5 列表参数(多参数)传入设置
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
    args = parse.parse_args()
    return args


if __name__ == '__main__':
    args = parse_args()
    print(args.num)
    for i in list(args.num):
        print(i)


argparse

3.2.6 互斥参数使用
import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    group = parse.add_mutually_exclusive_group()  # 1、在参数对象中添加互斥组
    group.add_argument('-b', '--brief', action='store_true', help='print brief message')  # 2、在互斥组中添加参数(store_true默认当命令行未输入参数则为False,否则为True)
    group.add_argument('-v', '--verbose', action='store_true', help='print verbose message')
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    volume = cal_vol(args.radius, args.height)
    if args.brief:
        print(volume)
    elif args.verbose:
        print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume))
    else:
        print('Volume of Cylinder is %s' % (volume))

命令行中b和v只能输入二者中的一个参数。
在这里插入图片描述

3.2.7 默认参数设置

set_defaults()可以设置一些参数的默认值

import math
import argparse


def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.set_defaults(height=4)
    args = parse.parse_args()
    return args


def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol


if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))

在这里插入图片描述

4. 参考文献

  • 原文

  • Python argparse命令行参数解析包的详细教程

  • 官方文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

argparse 模块详解 的相关文章

  • 调试时模拟 argparse 命令行参数输入

    该线程是上一个线程的扩展 可以找到here https stackoverflow com questions 50881403 debugging argpars in python 比如说 我有一个代码有两个用途 1 从整数列表中打印最
  • 如何使用argparse打开文件?

    我想使用打开文件进行阅读argparse 在 cmd 中它必须如下所示 my program py filepath 这是我的尝试 parser argparse ArgumentParser parser add argument fil
  • Python:引发 argparse.ArgumentError 后,argparse 引发一般错误

    我为需要遵循精确格式的参数定义了一个自定义正则表达式类型 我使用了另一篇文章中的代码 正则表达式自定义类型 https groups google com forum fromgroups topic argparse users tAC1
  • 允许多个字符的 argparse 选项的缩写形式

    我正在检查这个蟒蛇文件 https github com rafaelpadilla Object Detection Metrics blob master pascalvoc py L178它似乎使用了一个包含 2 个字符的简短参数 p
  • Python argparse 不带参数的命令行标志

    如何向命令行参数添加可选标志 例如 所以我可以写 python myprog py or python myprog py w I tried parser add argument w 但我只是收到一条错误消息说 Usage w W er
  • 导入错误:没有名为 argparse 的模块

    我正在尝试运行 Python 程序 但出现错误 ImportError No module named argparse 我找到了问题 argparse cli 中的 Python 模块 https stackoverflow com qu
  • python argparse子命令具有依赖性和冲突

    我想使用 argparse 来构建一个带有子命令的工具 可能的语法可以是 tool py 下载 from 1234 interval 60 tool py 下载 build 1432 tool py clean 数字 10 所以我想使用ar
  • Python 通过 argparse 多次使用不同的选项

    我正在开发一个自定义 Nagios 脚本 我想在其中以与现有 Nagios 插件相同的方式实现命令行参数的解析check disk 在该插件中你有一个选项参数 C to Clear当前配置并使用新参数重新开始 摘自check disk he
  • Python argparse 条件要求

    如何设置 argparse 如下 if 2 is on the command line no other arguments are required if 2 is not on the command line 3 and 4 arg
  • 如何在Python的argparse中对同一组参数调用parse_args()两次?

    简化的测试用例 我有一个需要两个参数的脚本 第一个是整数列表 第二个是必须包含在第一个参数的整数集中的单个整数 例如 python argtest py valid nums 1 2 3 num 2 应该可以 但是 python argte
  • 在 python 中记录 argparse 的值

    我正在尝试在 python 中使用 argparse 和logging 模块 我运行的程序有很多可能的选项 并且我已经成功实现了 argparse 模块来处理此任务 我想记录程序运行时每个选项的值并将其发送到日志文件 我尝试了以下几件事 并
  • Python 中使用 argparse 的条件命令行参数

    我想要一个程序 需要 action 标志 其中有效选择是dump and upload with upload是默认值 如果 且仅当 dump已选择 我希望还有一个 dump format 选项 有没有办法使用 argparse 来表达这一
  • 在 Python 的 argparse 中多次使用相同的选项

    我正在尝试编写一个接受多个输入源并对每个输入源执行某些操作的脚本 像这样的东西 my script py i input1 url input1 name input1 other var i input2 url input2 name
  • 为什么 Python 的 argparse 对 SystemExit 使用错误代码 2?

    当我给 Python 的 argparse 输入它不喜欢的输入时 它会引发一个代码为 2 的 SystemExit 其中似乎意味着 没有这样的文件或目录 https docs python org 2 library errno html
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • argparse 接受一切

    有没有办法有一个argparse ArgumentParser在读取未知选项时不引发异常 而是将所有带有值的未知选项放入字典中 并将那些没有值的选项放入列表中 例如 假设解析器中没有定义参数prog py 我传递了两个参数 prog py
  • 完全定制的Python帮助用法

    我正在尝试使用 Python 创建完全自定义的 帮助 用法 我计划将其导入到许多我想要具有风格一致性的程序中 但遇到了一些麻烦 我不知道为什么我的描述忽略换行符 尝试过 和 我无法让 出现在 ARGS 行的 换行符之后 显然它们坐在自己的行
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • argparse add_argument 别名

    有没有办法使用 argparse 创建别名 例如 我想做这样的事情 parser add argument foo parser add argument alias bar foo 也就是说 使用 bar应该相当于使用 foo 您可以简单

随机推荐

  • C++ for无限循环~

    无限循环 如果条件永远不为假 xff0c 则循环将变成无限循环 for 循环在传统意义上可用于实现无限循环 由于构成循环的三个表达式中任何一个都不是必需的 xff0c 您可以将某些条件表达式留空来构成一个无限循环 include lt io
  • VINS-Fuison调试笔记

    最近一直在断断续续的调试vins fuison xff0c odometry总是各种飘 xff0c 令人头大 记录一下调试过程 xff0c 供以后学习参考 首先选用一组可靠的视觉惯导传感器 xff0c 如Realsense D435i xf
  • 《C和指针》阅读笔记

    第9章 字符串 字符和字节 9 1 字符串基础 字符串就是一串 零个或多个字符 xff0c 并且以一个位模式为全0的NUL字节结尾 因此 xff0c 字符串所包含的字符内部不能出现NUL字节 NUL字节是字符串的终止符 xff0c 但它本身
  • 【蓝牙数据采集模块】-02-Sensor Controller 编写CC2650STK外设驱动

    上次说到把所有的传感器模块在Sensor Controller中实现读写 xff0c 并封装驱动 先来看一下CC2650STK的原理图 用红色方框标记的DIO 0 DIO 7 DIO 23 DIO 30是可以通过Sensor Control
  • ->:间接引用运算符

    gt 是一个整体 xff0c 它是用于指向结构体 C 43 43 中的class等含有子数据的指针用来取子数据 换种说法 xff0c 如果我们在C语言中定义了一个结构体 xff0c 然后申明一个指针指向这个结构体 xff0c 那么我们要用指
  • linux音频服务器,Linux声音系统

    TAG linux alsa oss pulseaudio esd aRts DATE 2013 08 13 Linux声音系统有些混乱 xff0c 它有三套音频驱动 OSS Open Sound System 商业版的OSS xff0c
  • android 网络调试工具,安卓网络调试助手

    安卓网络调试助手apk是一款内容比体积精彩得多的网络设置软件 安卓网络调试助手支持多种端口和协议 xff0c 而且安卓网络调试助手apk虽然功能很专业但是操作起来也不是很难 xff0c 很容易学会 xff01 软件介绍 安卓网络调试助手ap
  • 计算机非全日制硕士 选校,非全日制硕士研究生,到底值不值得报考?看完这篇就懂了!...

    网友一 xff1a 如果不是已经工作的 xff0c 不推荐报考 因为非全日制的待遇不如全日制 xff0c 同时公务员等体制很多要求全日制学历 同时学费也比全日制贵好几倍 加上本身作为新生事物 xff0c 就业市场的认可与否还很难讲 如果你已
  • android进入后台被杀死,Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制...

    新Activity启动及旧Activity保存流程 App在后台久置后 xff0c 再次从桌面或最近的任务列表唤醒时经常会发生崩溃 xff0c 这往往是App在后台被系统杀死 xff0c 再次恢复的时候遇到了问题 xff0c 而在使用Fra
  • V4L2框架

    前言 在分析v4l2之前最好具有的知识 xff1a 1 字符设备 因为v4l2是被枚举为字符设备 2 内存分配和映射 比如相关数据结构的分配和buffer 3 DMA xff0c 因为v4l2的数据传输用到了DMA 4 I2C xff0c
  • linux串口命令UART,STM32串口通信UART使用

    STM32串口通信UART使用 uart使用的过程为 xff1a 1 使能GPIO口和UART对应的总线时钟 2 配置GPIO口的输出模式 3 配置uart口相关的基本信息 4 使能uart口的相关的中断 xff0c 如接收中断 空闲中断等
  • c语言指void函数的指针,C语言中的函数指针与指针函数

    函数是任何一门语言中必不可少的部分 xff0c 正是由这些函数组成了程序 首先谈一下C语言中的函数指针与指针函数 xff0c 再了解一下函数参数传递的相关原理 1 函数指针与指针函数 1 函数指针 即指向这个函数的指针 xff0c 定义为
  • vins中imu融合_12-VINS应用改进之一:Fusing Detection

    目的是在VIO导在航系统中加入CNN目标检测功能 xff0c 简单起见 xff0c 并没有把CNN检测结果放入BA中进行优化 xff0c 也就是说CNN只借用VIO的定位结果而不对定位做贡献 思路如下 xff1a 1 通过ROS的messa
  • html做的网页连wifi,ESP32通过WEB页面连接WIFI

    在ESP32官方的例程中 xff0c 都是直接把WIFI的SSID和Password写死在程序里 xff0c 但是在实际使用中网络环境是不固定的 xff0c 如果更换了网络环境 xff0c 就得重新修改程序 xff0c 在实际运用中并不合理
  • linux允许putty链接,解决putty没法链接Linux问题-拒绝访问,

    1 putty没法链接Linux 采用ssh链接出现error connect refused 因为本人也是一开始学习Linux xff0c 发现竟然连不上Linux xff0c 看了不少其它人的博客 xff0c 其它人都有提出过其它解决方
  • centos上升级node_centos服务器升级nodejs, pm2

    突然抽风想升级服务器的nodejs版本 xff0c 原服务器版本运行的8 x xff0c 而目前 2019年5月30日 nodejs官方最新版本已经更新到了12 x了 xff0c 稳定版本也更新到了10 x 然后就折腾了一把去升级服务器的n
  • 计算机仿真应用化工,【计算机仿真论文】化工原理实验中计算机仿真的应用(共1623字)...

    前言 在化工人才的培养当中 xff0c 利用化工原理进行实践教学为重要内容之一 xff0c 其中涉及到了化工生产当中的诸多操作 xff0c 需要对实验的设备等进行熟练控制 在教学方法的不断创新当中 xff0c 逐渐将实验现象 原理 过程以及
  • 人工智能AI未来趋势

    人工智能 xff08 AI xff09 已经成为当今世界的热门话题之一 xff0c 我们可以看到它在许多领域中的应用 随着技术的不断发展 xff0c AI将会走向何方 xff1f 未来趋势如何 xff1f 首先 xff0c 我们可以想象AI
  • matlab有多好用,论操作体验,MATLAB、Julia和Python哪种更好?

    我一直质疑自己在研究和教学中是否应该继续使用 MATLAB 然而 xff0c 虽然使用起来得心应手 xff0c 也投入了很多 xff0c 但我很难调动起学习新东西的动力 我和其他人合作写过一本介绍计算科学的 MATLAB 教材 这本书里有
  • argparse 模块详解

    文章目录 1 argparse 模块简介2 未使用argparse示例3 使用argparse示例3 1 argparse简单示例3 2 argparse进阶示例3 2 1 可选参数设置3 2 2 可选参数引用名3 2 3 清除帮助中的参数