Python3中使用argparse模块解析命令行参数

2023-11-16

      argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数。实现在:https://github.com/python/cpython/blob/main/Lib/argparse.py

      argparse模块还会自动生成帮助和使用信息,即在最后加-h或--help。当用户输入的参数无效时,会触发error,并给出出错原因。

python test_argparse.py -h
python test_argparse.py --help

      使用argparse的步骤:

      1.创建解析器:argparse.ArgumentParser(),ArgumentParser是个class,构造它时有很多参数可以指定,若不指定这些参数都使用默认值,如description=None:此python程序功能的描述;add_help=True:添加-h/--help选项

parser = argparse.ArgumentParser(description="test argparse's use", add_help=True)

      2.添加参数:parser.add_argument(*args, **kwargs):*args允许函数接受任意数量的位置参数(positional arguments),**kwargs允许函数接受任意数量的关键字参数。Python不允许位置参数跟在关键字参数之后。

      (1).name or flags:一个名字,位置参数(positional arguments),不带有"-"或"--",如foo;一个可选字符串的列表,如-f, --foo。当parse_args()被调用时,可选参数会以"-"前缀识别,剩下的参数则会被假定为位置参数。

parser.add_argument("integers", metavar="N", type=int, nargs="+", help="an integer for the accumulator") # positional argument
parser.add_argument("--sum", dest="accumulate", action="store_const", const=sum, default=max, help="sum the integers(default: find the max)") # optional argument

args = parser.parse_args()
print(args.accumulate(args.integers)) # print either the sum or the max of the command-line integers

     

       (2).action:ArgumentParser对象将命令行参数与action相关联。这些action可以做与它们相关联的命令行参数的任何事,尽管大多数action只是简单的向parse_args()返回的对象上添加一个属性。action关键字参数指定应如何处理命令行参数。默认的action是"store",存储参数的值。

      (3).nargs:此关键字参数将不同数量的命令行参数与单个操作相关联。

      "?":如果不存在命令行参数,则会使用default值;还有一种情况,"-"选项字符串存在,但后面没有跟着命令行参数,则会使用const值。

      "*":所有命令行参数都收集到一个列表中。

      "+":与"*"类似,但至少存在一个命令行参数,否则会产生错误消息。

parser.add_argument('--foo', nargs='?', const='c', default='d')
args = parser.parse_args()
print(args.foo) # print 'c' or 'd' or command-line input

     

       (4).const:此关键字参数用于保存不是从命令行中读取但被各种ArgumentParser操作所需的常量值。对'store_const'和'append_const' action,const关键字参数必须给出;对其它action,默认为None。

      (5).default:此关键字参数用于在命令行参数不存在应使用的值,默认值为None。

      (6).type:此关键字参数允许执行任何必要的类型检查和类型转换。

      (7).choices:某些命令行参数应当从一组受限值中选择,这些可以通过将容器对象作为choices关键字参数传递给add_argument()来处理。当执行命令行解析时,参数值将被检查,如果参数不是可接受的值之一将触发错误消息。

parser.add_argument('addr', type=str, choices=['csdn', 'github'])
args = parser.parse_args()
print("addr:", args.addr)

     

       (8).required:通常,argparse模块假定"-f"和"--bar"等标志表示可选参数,在命令行中始终可以省略这些参数。要让一个选项成为必需的,则可以将required关键字参数指定为True。

      (9).help:包含参数简短描述的字符串。通常在命令行中使用-h或--help时,这些help描述将与每个参数一起显示。

      (10).metavar:当ArgumentParser生成帮助消息时,它需要某种方式来引用每个预期的参数。默认情况下,ArgumentParser对象使用dest值作为每个对象的"name"。默认情况下,对于位置参数action,直接使用dest值,对于可选参数action,dest值是大写的。可以使用metavar来指定一个替代名称。

parser.add_argument('--foo')
parser.add_argument('--bar', metavar='XXX')
args = parser.parse_args()

     

      (11).dest:大多数ArgumentParser操作都会添加一些值作为parse_args()返回的对象的一个属性。此属性的名称由add_argument()的dest关键字参数确定。

      3.解析参数:parser.parse_args(),将参数字符串转换为对象并将其设为命名空间的属性,返回带有成员的命名空间。

      更多介绍参考:https://docs.python.org/zh-cn/3.8/library/argparse.html

      GitHubhttps://github.com/fengbingchun/Python_Test

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

Python3中使用argparse模块解析命令行参数 的相关文章

  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • Dynamics CRM on premise 和 Skype for Business 集成显示用户状态

    Applies To Dynamics 365 online Dynamics 365 on premises Dynamics CRM 2016 Dynamics CRM Online Using Skype for Business w
  • EMC一些常见问题(面试也会稍微提及)

    什么是EMC测试 如何进行EMC测试 什么是EMC测试 如何进行EMC测试 EMC EMI设计 电子发烧友网 elecfans com 1 为什么要对产品做电磁兼容设计 答 满足产品功能要求 减少调试时间 使产品满足电磁兼容标准的要求 使产
  • STMF103学习笔记(三)——按键输入

    实验三 按键输入 注意输入模式的设置 按下时为高电平设置为下拉模式 按下时为低电平设置为上拉模式 这样输入时 上拉模式的得到高点平 下拉模式得到低电平 具体原理还不是很懂 按键IO输入初始化参考代码 void KEY Init 这里初始化k
  • 图像分割与目标检测与区别

    检测与分割的区别 https www leiphone com category yanxishe Fah5xOL3Qb96k1NL html 1 目标检测 预测包围盒 YOLO Fast RCNN 似乎还有个SSD 输入 一个矩阵 输入图
  • 6-python异常、错误、模块、包

    文章目录 1 异常 2 错误 3 模块 4 包 综合练习 1 异常 打开一个不存在的文件会引发异常 FileNotFoundError Errno 2 No such file or directory D 不存在的文件 txt f ope
  • Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException

    spring boot mybaits 出现异常 The error may exist in file F javatext basi code frame springboot query2 target classes mapper
  • 刷脸作为数据入口应用在新零售领域上

    日常生活中 我们所常见的人脸识别大多应用在安防领域 例如刷脸门禁 刷脸签到和刷脸考勤等 将人脸识别技术应用在零售消费领域 可能要从支付宝推出蜻蜓刷脸支付收银机开始 人脸识别技术在零售消费领域上作为支付凭证 除了刷脸支付 人脸识别技术应用在零
  • VUE 之 Jspreadsheet CE电子表格数据处理

    需求 将表格内容作为list集合 向后端传递 注意 需求默认展示表格为30行空表格 后端接口会拦截空值 所以需将未输入的行去掉 默认的Jspreadsheet 实现步骤 获取Jspreadsheet 数据并处理成后端所需参数格式 var t
  • 如何查看在rabbitMQ里面堆积的消息

    回顾上一节的内容 通过配置了stream来对MQ的简单的封装 主要定义接口 里面定义input以及output来绑定交换机 获取消息通道MessageChannel以及订阅通道SubscribableChannel对象 而消费端配置 str
  • Python编程基础之三对象

    一 简介 Python使用对象模型来存储数据 构造任何类型的值都是一个对象 再加上内建类型 标准类型运算符和内建函数 有助于更好的理解Python是如何工作的 二 详解 1 Python的对象 所有的 Python 对像都拥有三个特性 身份
  • Windows与网络基础22-数据封装与解封装

    数据的封装和解封装 目标 理解数据的封装与解封装过程 针对于一个简单的网络环境 能够独立讲解出网络传输过程 目录 一 数据封装过程 二 数据解封装过程 三 每一层对应的网络设备 四 简单网络数据封装解封装实例 一 数据封装过程 应用层 将原
  • 12、文件链接、磁盘阵列、文件系统、网络协议、数据封装过程

    一 文件链接 ln s 软链接 ln 硬链接 区别 1 软链接产生新的inode号 硬链接不产生新的inode号 ls i 看inode 2 源文件删除后 软链接文件不可以用 硬链接文件可用 3 软链接可以跨分区 硬链接不可以跨分区 4 不
  • 关于扫描二维码拒绝获取摄像头权限导致的错误解决方法

    这个问题烦了我2天 在网上查阅资料 也许是自己的理解错误 怎么改都不行 今天换了一种思维 解决了这个问题 废话不多说 先上代码 try mCameraManager openDriver catch IOException e e prin
  • ROS集成开发环境搭建【安装VScode】

    1 下载 注意 下载操作是在虚拟机中的Ubuntu中进行的 可以下载到 home 下载 文件夹中 vscode 下载链接 最新版本 Documentation for Visual Studio CodeFind out how to se
  • (c/c++)——STL

    文章目录 一 迭代器 iterator 二 容器 1 string 2 Vector 最常用 3 list 4 map 5 unordered map 6 queue 三 算法 1 for each 2 find if 3 sort 一 迭
  • 大数据毕业设计 人脸识别与疲劳检测系统 - python opencv 图像识别

    文章目录 0 前言 1 课题背景 2 Dlib人脸识别 2 1 简介 2 2 Dlib优点 2 3 相关代码 2 4 人脸数据库 2 5 人脸录入加识别效果 3 疲劳检测算法 3 1 眼睛检测算法 3 2 打哈欠检测算法 3 3 点头检测算
  • taro框架开发小程序经验总结

    最近这一年来 做了三个小程序 第一个小程序用的原生框架 所有的样式和js都要自己写 不好看还写得头疼死 写第二个小程序的时候正觉得VUE3流行 想熟悉一下VUE3 因此找到了taro框架 这个框架好不好我也无从分辨 暂时能用就行 一 搭建项
  • 手把手看监控--当不设置JVM-Xms时

    背景 运维埋的一个坑 在该应用上只配置留 Xmx 没有配置 Xms 表象 堆内存从0 2G开始 最大到0 8G 就开始执行GC 导致频繁GC 大致间隔1分钟 次 从下图左侧即可看到 解决 增加 Xms重新发版本 堆内存 GC间隔明显看着好多
  • 网关服务器性能,服务网关API路由导致的性能问题分析

    背景 酷家乐是从 16 年初开始进行服务化改造的 因为一些特殊原因 无法直接使用主流的dubbo 或 spring cloud 因此酷家乐研发团队在开源的基础上做了二次开发 迅速上线了一套定制型的微服务框架 和其他微服务框架类似 酷家乐自己
  • Python3中使用argparse模块解析命令行参数

    argparse是Python的一个标准模块 用于解析命令行参数 即解析sys argv中定义的参数 实现在 https github com python cpython blob main Lib argparse py argpars