argparse部分用法

news2024/9/20 20:34:49

文章目录

  • 一、一个简单的示例
    • 1.导入模块
    • 2.创建解析器
    • 3.添加参数
    • 4.解析参数
    • 5.使用解析的参数
    • 6.完整程序
    • 7.运行
  • 二、更多用法
    • 1.ArgumentParser对象创建时的参数
    • 2.add_argument()的参数
      • (1)name:名称
        • 1)位置参数
        • 2)可选参数
        • 3)结合位置参数和可选参数
      • (2)action:对参数的行为
      • (3)nargs:参数个数
      • (4)default:默认值
      • (5)choices:命令行参数应从一组限制值中选择

参考资料:

官方文档,最全面详细

菜鸟教程:Argparse 教程 — Python 文档

csdn博客:argparse简介

csdn博客:python中的argparse基本用法

一、一个简单的示例

1.导入模块

import argparse

2.创建解析器

parser = argparse.ArgumentParser(description="这是一个示例程序")

3.添加参数

parser.add_argument('name', type=str, help='你的名字')
parser.add_argument('age', type=int, help='你的年龄')
parser.add_argument('--city', type=str, help='你所在的城市', default='未知')

4.解析参数

args = parser.parse_args()

5.使用解析的参数

print(f"你好, {args.name}!")
print(f"你 {args.age} 岁了。")
print(f"你住在 {args.city}。")

6.完整程序

import argparse

def main():
    # 创建解析器
    parser = argparse.ArgumentParser(description="这是一个示例程序")

    # 添加参数
    parser.add_argument('name', type=str, help='你的名字')
    parser.add_argument('age', type=int, help='你的年龄')
    parser.add_argument('--city', type=str, help='你所在的城市', default='未知')

    # 解析参数
    args = parser.parse_args()

    # 使用解析的参数
    print(f"你好, {args.name}!")
    print(f"你 {args.age} 岁了。")
    print(f"你住在 {args.city}。")

if __name__ == "__main__":
    main()

7.运行

python example.py guodong 18 --city wuhan

运行结果:

在这里插入图片描述

二、更多用法

1.ArgumentParser对象创建时的参数

以下为部分参数:

prog:程序的名称,默认为 os.path.basename(sys.argv[0]),即执行时的程序名。可以通过设置 prog= 修改显示的程序名称。
usage:描述程序的使用方式,默认根据添加到解析器的参数自动生成。可以通过 usage= 自定义使用说明。
description:参数帮助前显示的文本。默认为空。使用 description= 可添加简要的程序功能描述。
epilog:参数帮助后显示的文本。默认为空。通过 epilog= 可添加额外的程序说明。
parents:一个包含需要包含的其他 ArgumentParser 对象的列表。可以通过 parents= 将这些参数添加到当前的 ArgumentParser 对象中。
add_help:是否添加 -h/–help 选项显示帮助信息,默认为 True。可以通过 add_help=False 禁用此选项。
exit_on_error:当出现解析错误时,是否退出并显示错误信息,默认为 True。可以通过 exit_on_error=False 禁用此行为。

2.add_argument()的参数

ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

name or flags - 可以是一个名称或一组选项字符串,例如 foo 或 -f, --foo。
action - 指定当命令行遇到这个参数时所采取的基本操作类型。
nargs - 指定应该消耗的命令行参数的数量。
const - 某些 action 和 nargs 选项需要的常量值。
default - 如果命令行中没有出现该参数,并且它也不存在于命名空间对象中,所产生的值。
type - 命令行参数应该被转换成的类型。
choices - 参数允许的取值序列。
required - 指定命令行选项是否可以省略(仅对可选参数有效)。
help - 参数的简短描述。
metavar - 在使用信息中作为参数的名称。
dest - 指定解析参数后添加到命名空间对象的属性名称。

(1)name:名称

在添加参数时,要指定其名称。

当调用 parse_args() 时,可选参数将通过 “-” 前缀识别,剩余的参数将被视为位置参数。

以下为一个示例:

>>>parser = argparse.ArgumentParser(prog='PROG')
>>>parser.add_argument('-f', '--foo')
>>>parser.add_argument('bar')
>>>parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>>parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>>parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar

首先用add_argument()添加了两个参数,一个是位置参数bar,一个是可选参数-foo,或者简称为-f。然后用parse_args()解析参数,解析结果见上(>>>后为代码,其余的即结果)。

1)位置参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
                    type=int)
args = parser.parse_args()
print(args.square**2)

运行:

$ python3 prog.py 4
16

2)可选参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

运行:

$ python3 prog.py -v
verbosity turned on

3)结合位置参数和可选参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
    print(f"the square of {args.square} equals {answer}")
else:
    print(answer)

$ python3 prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square
$ python3 prog.py 4
16
$ python3 prog.py 4 --verbose
the square of 4 equals 16
$ python3 prog.py --verbose 4
the square of 4 equals 16

(2)action:对参数的行为

1)store:默认值,存储参数
2)append:这会存储一个列表,并将每个参数值附加到列表中

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])

3)count:计算关键字出现的次数

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count', default=0)
>>> parser.parse_args(['-vvv'])
Namespace(verbose=3)

4)version:打印版本信息

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0

(3)nargs:参数个数

ArgumentParser 对象通常将单个命令行参数与要执行的单个操作关联起来。nargs 关键字参数将不同数量的命令行参数与单个操作关联起来。

支持的值包括:

1)N (一个整数)。命令行中的 N 个参数将一起收集到一个列表中。例如:

复制代码
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs=2)
>>> parser.add_argument('bar', nargs=1)
>>> parser.parse_args('c --foo a b'.split())
Namespace(bar=['c'], foo=['a', 'b'])

注意,nargs=1 会产生一个包含一个项目的列表。这与默认情况不同,在默认情况下,项目本身被单独产生。

2)‘?’。如果可能,从命令行中消耗一个参数,并作为单个项目产生。如果没有命令行参数,则会产生默认值。请注意,对于可选参数,还有一种情况——选项字符串存在但未跟随命令行参数。在这种情况下,将产生 const 中的值。

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='?', const='c', default='d')
>>> parser.add_argument('bar', nargs='?', default='d')
>>> parser.parse_args(['XX', '--foo', 'YY'])
Namespace(bar='XX', foo='YY')
>>> parser.parse_args(['XX', '--foo'])
Namespace(bar='XX', foo='c')
>>> parser.parse_args([])
Namespace(bar='d', foo='d')
nargs='?' 

更常见的用法之一是允许可选的输入和输出文件:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
>>> parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)

3)‘*’。所有存在的命令行参数都会被收集到一个列表中。注意,一般来说,不太可能有多个带有 nargs=‘’ 的位置参数,但多个带有 nargs='’ 的可选参数是可能的。例如:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])

4)‘+’。与 ‘*’ 类似,所有存在的命令行参数都会被收集到一个列表中。此外,如果没有至少一个命令行参数存在,则会生成错误消息。例如:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('foo', nargs='+')
>>> parser.parse_args(['a', 'b'])
Namespace(foo=['a', 'b'])
>>> parser.parse_args([])
usage: PROG [-h] foo [foo ...]
PROG: error: the following arguments are required: foo

如果未提供 nargs 关键字参数,消耗的参数数量由操作决定。通常,这意味着将消耗单个命令行参数,并产生单个项目(而不是列表)。

(4)default:默认值

所有可选参数和某些位置参数都可以在命令行中省略。add_argument() 的 default 关键字参数的值默认为 None,它指定了如果命令行参数不存在时应该使用的值。对于可选参数,当命令行中没有出现选项字符串时,将使用默认值。

(5)choices:命令行参数应从一组限制值中选择

当解析命令行时,将检查参数值,如果参数不是可接受的值之一,将显示错误消息:

>>> parser = argparse.ArgumentParser(prog='game.py')
>>> parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
>>> parser.parse_args(['rock'])
Namespace(move='rock')
>>> parser.parse_args(['fire'])
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock',
'paper', 'scissors')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1935998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

priority_queue的使用与模拟实现

目录 priority_queue的使用 priority_queue的介绍 priority_queue的定义方式 priority_queue成员函数的介绍 priority_queue的模拟实现 1&#xff1a;堆的向上调整算法 2&#xff1a;堆的向下调整算法 两种算法的比较与各自最佳使用 priority_queue的模拟实现 priorit…

使用VMware虚拟机安装kali 2019

一、下载kali linux镜像 下载 kali Linux的ISO镜像文件 网盘链接&#xff1a;https://pan.baidu.com/s/1GRtJxGBlqFfmU24HLEy3-g?pwd57u3 提取码&#xff1a;57u3 二、安装并配置 Kali Linux 新建虚拟机 在虚拟机创建向导中&#xff0c;选择经典配置 选择下载好的kali镜…

细说MCU用定时器控制ADC采样频率的实现方法并通过Simulink查看串口输出波形

目录 一、硬件工程 二、建立Simulink模型 1.安装MATLAB和Simulink 2.建立Simulink模型 三、代码修改 1.修改回调函数 2.产看结果 3.完整的main.c 本文作者的文章 细说MCU用定时器控制ADC采样频率的实现方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/…

WSL-Ubuntu20.04环境使用YOLOv8 TensorRT推理加速

在阅读本章内容之前,需要把部署环境以及训练环境都安装好。 1.TensorRTX下载 这里使用Wang-xinyu大佬维护的TensorRTX库来对YOLOv8进行推理加速的演示,顺便也验证一下前面环境配置的成果。 github地址:GitHub - wang-xinyu/tensorrtx,下载后放到wsl的路径下,我这里放在/h…

JavaScript日期对象倒计时案例

思路&#xff1a;1.先求出当前时间的总毫秒数 2.再求出所需要求的时间的总毫秒数 3.用所求时间的减去当前时间的可得到倒计时剩余时间 4.最后将所求的倒计时剩余时间转换为天&#xff0c;小时&#xff0c;分钟&#xff0c;秒即可 <!DOCTYPE html> <html lang"en…

Java并发04之线程同步机制

文章目录 1 线程安全1.1 线程安全的变量1.2 Spring Bean1.3 如果保证线程安全 2 synchronized关键字2.1 Java对象头2.1.1 对象组成部分2.1.2 锁类型2.1.3 锁对象 2.2 synchronized底层实现2.2.1 无锁状态2.2.2 偏向锁状态2.2.3 轻量级锁状态2.2.4 重量级锁2.2.5 锁类型总结2.2.…

【动态规划】力扣2266.统计打字方案数

Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。在这里插入图片描述 为了 打出 一个字母&#xff0c;Alice 需要 按 对应字母 i 次&#xff0c;i 是该字母在这个按键上所处的位置。 比方说&#xff0c;为了按出字母 ‘s’ &#xff0c;Alice 需要按 ‘7’ 四次。…

C++:类的默认成员函数

默认成员函数就是⽤⼾没有显式实现&#xff0c;编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类&#xff0c;我们不写的情况下编译器会默认⽣成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个。 定义一个空类&#xff1a; class A { }; 经过编译器…

Etsy开店指南:分步指南与防封技巧

您的Etsy帐户在注册后不久就被封了吗&#xff1f;如果是这样&#xff0c;您在设置Etsy帐户时就已经错误了&#xff0c;其实这其中还是有很多细节需要注意&#xff1b;本文全面讲解了如何逐步创建帐户&#xff0c;如果你也正在准备&#xff0c;那就继续看吧&#xff01; 一、在开…

基于Java的汽车租赁管理系统设计(含文档、源码)

本篇文章论述的是基于Java的汽车租赁管理系统设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘 要 系统运行截图 系统总体设计 系统论文 资源下载 摘 要 近年来&#xff0c;随着改革开放…

元宇宙:科技巨头的下一个战场

热门标题&#xff1a; “元宇宙&#xff1a;科技巨头的下一个战场” 相关文章问题&#xff1a; 问题&#xff1a; 在科技巨头纷纷布局元宇宙的背景下&#xff0c;元宇宙将如何影响未来的科技产业和日常生活&#xff1f; 文章概要&#xff1a; 随着Facebook更名为Meta&…

Unity XR Interaction Toolkit的安装(二)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、安装1.打开unity项目2.打开包管理器&#xff08;PackageManage&#xff09;3.导入Input System依赖包4.Interaction Layers unity设置总结 前言 安装前请注意&#xff1a;需要…

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.9-2.10

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第二周&#xff1a;机器学习策略&#xff08;2&#xff09;(ML Strategy (2))2.9 什么是端到端的深度学习&#xff1f;&#xff08;What is end-to-end deep learning?&#x…

前端转base64格式的字体图标方法

1.将需要的字体图标包下载到本地 2.访问 transfonter.org 将字体图标转成base64格式 如 这样就可以和正常的字体图标一样使用了

【深度学习驱动智能超材料设计与应用】

在深度学习与超材料融合的背景下&#xff0c;不仅提高了设计的效率和质量&#xff0c;还为实现定制化和精准化的治疗提供了可能&#xff0c;展现了在材料科学领域的巨大潜力。深度学习可以帮助实现超材料结构参数的优化、电磁响应的预测、拓扑结构的自动设计、相位的预测及结构…

【HTML入门】第十五课 - form表单(下)表单控件们(二)

上一小节我们说了文本输入框&#xff0c;密码输入框&#xff0c;数值型输入框&#xff0c;还有大的文本域。这一小节&#xff0c;我们继续说form表单中的一些常用的控件们。 目录 1 单选按钮 2 复选框 3 下拉列表选择 1 单选按钮 单选按钮&#xff0c;就是说一组按钮中&am…

栈(用C语言实现)

1. 栈 1.1 概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出 LIFO&#xff08;Last In First Out&#xff09;的原则。 压…

多源字段聚合重塑算法

要求如下 [[{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",},{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",}],[{"oon…

使用 Flask 3 搭建问答平台(三):注册页面模板渲染

前言 前端文件下载 链接https://pan.baidu.com/s/1Ju5hhhhy5pcUMM7VS3S5YA?pwd6666%C2%A0 知识点 1. 在路由中渲染前端页面 2. 使用 JinJa 2 模板实现前端代码复用 一、auth.py from flask import render_templatebp.route(/register, methods[GET]) def register():re…

Elasticsearch:评估搜索相关性 - 第 1 部分

作者&#xff1a;来自 Elastic Thanos Papaoikonomou, Thomas Veasey 这是一系列博客文章中的第一篇&#xff0c;讨论如何在更好地理解 BEIR 基准的背景下考虑评估你自己的搜索系统。我们将介绍具体的技巧和技术&#xff0c;以便在更好地理解 BEIR 的背景下改进你的搜索评估流程…