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 模块详解 的相关文章

  • max_help_position 在 python argparse 库中不起作用

    嗨 同事 我有代码 max help position 是 2000 formatter class lambda prog argparse HelpFormatter prog max help position 2000 parser
  • 框架 argparse - 检查是否设置了标志

    我想以这种方式使用我的脚本 python script py x 现在我使用此命令运行它 python script py x y My code parser ArgumentParser parser add argument x x
  • 使用 argparse 解析字符串

    所以我希望argparse的输入是一个字符串而不是命令行 例如 python3 some script py arg1 arg2 arg3 我想给 argparse 字符串 arg1 arg2 arg3 import argparse co
  • Python 中的参数依赖性 - 无法使其工作

    我正在尝试向我的脚本添加参数依赖项 这个想法是 clone参数需要非空 gituser 细读后这个例子 https stackoverflow com questions 21879657 argparse argument depende
  • 使用 argparse 将参数发送给 Python 脚本中的函数

    我处于一种奇怪的情况 我需要一个 Python 函数从脚本中运行 然后从我的主代码中调用该脚本 我想用subprocess模块 并知道如何使用它将参数传递给纯脚本 但问题是 我需要将参数传递给其中的嵌套 Python 函数 其中大部分是可选
  • Python argparse 的选项?

    我正在用 Python 编写一个脚本 并使用 argparse 来解析我的参数 该脚本应该比较可用对准器池中的两个不同的 对准器 并且每个对准器都有一些配置选项 我希望能够使用以下方式调用我的脚本 script py aligner ali
  • 使用 argparse 输出来调用函数

    目前我的代码如下所示 它允许我解析我的程序脚本获取的多个参数 有没有更接近 最佳实践 的不同方法 我还没有看到实际使用输出的代码argparse 仅介绍如何设置 def useArguments x 0 while x lt 5 if x
  • 将位置参数作为 args 和可选参数作为 kwargs 整齐地从 argparse 传递到函数

    我想编写一个Python脚本 它通过以下方式获取一些必要的位置和一些可选的命令行参数argparse 让我们调用位置参数a b c 以及可选参数x y z 在我的 Python 脚本中 我想将这些参数传递给一个函数 具体来说 我想要a b
  • Python argparse:metavar 和 action=store_true 一起

    我在 Python 中使用 argparse 模块来解析在命令行界面中键入的参数 我对子解析器对象进行了以下 add argument 调用 submit parser add argument pv provision metavar P
  • 允许多个字符的 argparse 选项的缩写形式

    我正在检查这个蟒蛇文件 https github com rafaelpadilla Object Detection Metrics blob master pascalvoc py L178它似乎使用了一个包含 2 个字符的简短参数 p
  • 从Python中的ArgumentParser解析的args创建arg字符串[重复]

    这个问题在这里已经有答案了 如果我有一个argparser ArgumentParser 加上返回的命名空间parser parse args 是否有一种简单的方法可以将命名空间转换回 argv 列表 以便它们可以传递回程序 本质上 par
  • argparse —— 可选参数需要 2 个值或没有值

    我正在尝试为脚本创建一个可选参数 该参数可以不带任何值 也可以带 2 个值 仅此而已 你能使用 argparse 来完成这个任务吗 desired output script py a gt works script py a val1 g
  • 使用 argparse 解析布尔值

    我想使用 argparse 来解析写为 foo True 或 foo False 的布尔命令行参数 例如 my program my boolean flag False 但是 以下测试代码并没有达到我想要的效果 import argpar
  • 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
  • 如何将命令行参数从 pytest 传递到代码

    我正在尝试将参数从 pytest 测试用例传递到正在测试的模块 例如 使用 main pyPython 样板 https www python boilerplate com py3 argparse pytest 我可以从命令行运行它 p
  • Python 中使用 argparse 的条件命令行参数

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

    我想收到一个dict str gt str 来自命令行的参数 做argparse ArgumentParser提供吗 或者还有其他图书馆吗 对于命令行 program py dict d key key1 value val1 key ke
  • 是否可以在 django 管理命令中创建子解析器?

    标题确实说明了一切 但我目前有这个 但它不起作用 class Command BaseCommand help Functions related to downloading parsing and indexing the conten
  • 在 Python 的 argparse 中多次使用相同的选项

    我正在尝试编写一个接受多个输入源并对每个输入源执行某些操作的脚本 像这样的东西 my script py i input1 url input1 name input1 other var i input2 url input2 name
  • 如何使用 Python Argparse 制作所需参数的短版本和长版本?

    我想指定一个名为的必需参数inputdir但我也想要它的简写版本i 我没有看到一个简洁的解决方案来做到这一点 而不使用两个可选参数 然后进行我自己的检查 是否有我没有看到的首选做法 或者唯一的方法是将两者设为可选并进行我自己的错误处理 这是

随机推荐

  • 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 清除帮助中的参数