Python argparse 处理命令行小结

2023-05-16

Python argparse 处理命令行小结

1. 关于argparse
是python的一个命令行解析包,主要用于处理命令行参数

 

2. 基本用法
test.py是测试文件,其内容如下:


import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

测试:
/home $ python test.py
/home $ python test.py --help
usage: test.py [-h]
optional arguments:
-h, --help show this help message and exit

/home $ python test.py -v 
usage: test.py [-h]
test.py: error: unrecognized arguments: -v

/home $ python test.py tt
usage: test.py [-h]
test.py: error: unrecognized arguments: tt  

第一个没有任何输出和出错
第二个测试为打印帮助信息,argparse会自动生成帮助文档
第三个测试为未定义的-v参数,会出错
第四个测试为未定义的参数tt,出错

 

3. positional arguments

修改test.py的内容如下:


import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print args.echo

测试:
/home $ python test.py 
usage: test.py [-h] echo
test.py: error: too few arguments

/home $ python test.py -h
usage: test.py [-h] echo

positional arguments:
echo

optional arguments:
-h, --help show this help message and exit

/home $ python test.py tt
tt  

定义了一个叫echo的参数,默认必选

第一个测试为不带参数,由于echo参数为空,所以报错,并给出用法(usage)和错误信息
第二个测试为打印帮助信息
第三个测试为正常用法,回显了输入字符串tt

 

4. optional arguments

中文名叫可选参数,有两种方式:
一种是通过一个-来指定的短参数,如-h;
一种是通过--来指定的长参数,如--help
这两种方式可以同存,也可以只存在一个,修改test.py内容如下:


import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print "verbosity turned on"

注意这一行:parser.add_argument("-v", "--verbosity", help="increase output verbosity")
定义了可选参数-v或--verbosity,通过解析后,其值保存在args.verbosity变量中
用法如下:

/home $ python test.py -v 1
verbosity turned on

/home $ python test.py --verbosity 1
verbosity turned on

/home $ python test.py -h 
usage: test.py [-h] [-v VERBOSITY]

optional arguments:
-h, --help show this help message and exit
-v VERBOSITY, --verbosity VERBOSITY
increase output verbosity

/home $ python test.py -v 
usage: test.py [-h] [-v VERBOSITY]
test.py: error: argument -v/--verbosity: expected one argument  

测试1中,通过-v来指定参数值

测试2中,通过--verbosity来指定参数值
测试3中,通过-h来打印帮助信息
测试4中,没有给-v指定参数值,所以会报错

 

5. action='store_true'
上一个用法中-v必须指定参数值,否则就会报错,有没有像-h那样,不需要指定参数值的呢,答案是有,通过定义参数时指定action="store_true"即可,用法如下


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"

测试:
/home $ python test.py -v
verbosity turned on

/home $ python test.py -h
usage: test.py [-h] [-v]

optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity  

第一个例子中,-v没有指定任何参数也可,其实存的是True和False,如果出现,则其值为True,否则为False

 

6. 类型 type
默认的参数类型为str,如果要进行数学计算,需要对参数进行解析后进行类型转换,如果不能转换则需要报错,这样比较麻烦
argparse提供了对参数类型的解析,如果类型不符合,则直接报错。如下是对参数进行平方计算的程序:


import argparse
parser = argparse.ArgumentParser()
parser.add_argument('x', type=int, help="the base")
args = parser.parse_args()
answer = args.x ** 2
print answer

测试:
/home $ python test.py 2
4
/home $ python test.py two
usage: test.py [-h] x
test.py: error: argument x: invalid int value: 'two'

/home $ python test.py -h 
usage: test.py [-h] x

positional arguments:
x the base

optional arguments:
-h, --help show this help message and exit  

第一个测试为计算2的平方数,类型为int,正常
第二个测试为一个非int数,报错
第三个为打印帮助信息

 

7. 可选值choices=[]
5中的action的例子中定义了默认值为True和False的方式,如果要限定某个值的取值范围,比如6中的整形,限定其取值范围为0, 1, 2,该如何进行呢?
修改test.py文件如下:


import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
print "{}^2 == {}".format(args.square, answer)
else:
print answer

测试:
/home $ python test.py 4 -v 0
16
/home $ python test.py 4 -v 1
4^2 == 16
/home $ python test.py 4 -v 2
the square of 4 equals 16
/home $ python test.py 4 -v 3
usage: test.py [-h] [-v {0,1,2}] square
test.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
/home $ python test.py -h
usage: test.py [-h] [-v {0,1,2}] square

positional arguments:
square display a square of a given number

optional arguments:
-h, --help show this help message and exit
-v {0,1,2}, --verbosity {0,1,2}
increase output verbosity  

测试1, 2, 3 为可选值范围,通过其值,打印不同的格式输出;
测试4的verbosity值不在可选值范围内,打印错误
测试5打印帮助信息

 

8. 自定义帮助信息help
上面很多例子中都为help赋值,如
parser.add_argument("square", type=int, help="display a square of a given number")
在打印输出时,会有如下内容

positional arguments:
square display a square of a given number
也就是help为什么,打印输出时,就会显示什么

 

9. 程序用法帮助
8中介绍了为每个参数定义帮助文档,那么给整个程序定义帮助文档该怎么进行呢?
通过argparse.ArgumentParser(description="calculate X to the power of Y")即可
修改test.py内容如下:


import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
print answer
elif args.verbose:
print "{} to the power {} equals {}".format(args.x, args.y, answer)
else:
print "{}^{} == {}".format(args.x, args.y, answer)  

打印帮助信息时即显示calculate X to the power of Y


/home $ python test.py -h
usage: test.py [-h] [-v | -q] x y

calculate X to the power of Y

positional arguments:
x the base
y the exponent

optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet  

 

10. 互斥参数

在上个例子中介绍了互斥的参数


group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
第一行定义了一个互斥组,第二、三行在互斥组中添加了-v和-q两个参数,用上个例子中的程序进行如下测试:

/home $ python test.py 4 2 
4^2 == 16
/home $ python test.py 4 2 -v
4 to the power 2 equals 16
/home $ python test.py 4 2 -q
16
/home $ python test.py 4 2 -q -v  

可以看出,-q和-v不出现,或仅出现一个都可以,同时出现就会报错。
可定义多个互斥组

 

11.参数默认值
介绍了这么多,有没有参数默认值该如何定义呢?
修改test.py内容如下:


import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1,
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
print "{}^2 == {}".format(args.square, answer)
else:
print answer

测试:
/home $ python test.py 8 
8^2 == 64
/home $ python test.py 8 -v 0
64
/home $ python test.py 8 -v 1
8^2 == 64
/home $ python test.py 8 -v 2
the square of 8 equals 64  

可以看到如果不指定-v的值,args.verbosity的值默认为1,为了更清楚的看到默认值,也可以直接打印进行测试。

 

转载于:https://www.cnblogs.com/pugang/p/11381799.html

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

Python argparse 处理命令行小结 的相关文章

  • redis配置

    1 Redis 3 2x配置文件详解 2 3 4 默认redis不是以后台进程的方式启动 xff0c 如果需要在后台运行 xff0c 需要将这个值设置成yes 5 以后台方式启动的时候 xff0c redis会写入默认的进程文件 var r
  • Cosmos OpenSSD架构分析--FSC

    接口速度 xff1a type bw read75 s1s 75 s 8k 1s 61 104m swrite 1300 s 1s 1300 s 8k 1s 61 6m serase3 8ms 1s 3 8ms 8k 256 1s 61 5
  • 单片机的栈

    导读 xff1a 在C语言的世界里 xff0c 栈的地位非常举足轻重 xff0c 许多错误都可能和栈设置有关 xff0c 那么该如何确定栈的大小 xff1f 今天分享一点栈知识 xff0c 帮助你确定栈的大小 xff0c 参考链接请点击下方
  • GPS数据接收 串口调试感受

    注册这个账户也有一段日子了 xff0c 不知不觉已经研2了 xff0c 时间过的好快 xff0c 研3的学长已经答辩完 xff0c 马上要离开学校去工作了 xff0c 在南京 xff0c 一份不错的工作 这学期已经过去一个月了 xff0c
  • 使用VNC访问Windows桌面

    1 背景介绍 两台电脑 xff0c 一个笔记本 xff0c 一个台式机 笔记本上装的是Windows 10 通过上网小助手上网 xff08 P S 上网小助手 Stupid Policy xff09 台式机上装的是Ubuntu 14 04L
  • Maven 与 IntelliJ IDEA 的完美结合<转>

    转载地址 xff1a http www open open com lib view open1388650391891 html 你是否正在学习Maven xff1f 是否因为Maven难用而又不得不用而苦恼 xff1f 是否对Eclip
  • Cannot install ubuntu or other linux flavours on citrix Xen server

    Citrix Xen sucks When u try to install linux stuff on its Xen servers u will get an error complaining errors like below
  • web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

    问题描述 最近将公司官网样式进行了调整 xff0c 部署到服务器后访问发现页面展示不正常 xff0c 但是刷新之后就会展示正常 问题分析 研究之后发现可能的原因有 css文件过大 xff0c 加载缓慢本地缓存问题 xff0c 虽然服务器修改
  • 目标检测篇-FPN论文精读

    1 FPN网络结构 基于feature pyrimid来检测不同scale的object xff0c 共有4种思路 a 使用图像金字塔构建特征金字塔 在每个图像尺度上独立计算的 b 只使用单一尺度的特征 c 重用由卷积神经网络计算的金字塔特
  • VNC的安装和常用命令

    主要参考文章 xff1a http www cnblogs com coderzh archive 2008 07 16 1243990 html http os 51cto com art 201005 201136 all htm ht
  • Deepin debian安装Libreoffice

    Libreoffice LibreOffice 是一款功能强大的办公软件 xff0c 默认使用开放文档格式 OpenDocument Format ODF 并支持 docx xlsx pptx 等其他格式 它包含了 Writer Calc
  • 小波变换——哈尔小波,Haar

    哈尔小波转换是于1909年由Alfr d Haar所提出 xff0c 是小波变换 xff08 Wavelet transform xff09 中最简单的一种变换 xff0c 也是最早提出的小波变换 Alfr d Haar xff0c 188
  • 一个字节多少位

    前几天笔试发现这个问题有点模糊 xff0c 囧 xff0c 记录一下 xff1a 1字节 xff08 byte xff09 61 8位 xff08 bit xff09 在16位的系统中 xff08 比如8086微机 xff09 1字 xff
  • java 基础排序(冒泡、插入、选择、快速)算法回顾

    java 基础排序 xff08 冒泡 插入 选择 快速 xff09 算法回顾 冒泡排序 code private static void bubbleSort int array int temp for int i 61 0 i lt a
  • Houdini Python开发实战 课程笔记

    P2 43 P3 43 P4 43 P5 基础 xff1a 1 Houdini中使用Python的地方 2 Textport xff1a 可使用cd ls等路径操作的命令 xff08 命令前加 xff0c 可在python中使用 xff09
  • Houdini Mac 添加external editor

    我的尝试 xff08 没有成功 xff09 xff1a 1 找到houdini env文件 2 修改env文件 xff0c 添加 EDITOR 61 34 Applications Sublime Text app Contents Sha
  • Vue拖拽组件列表实现动态页面配置

    需求描述 最近在做一个后台系统 xff0c 有一个功能产品需求是页面分为左右两部分 xff0c 通过右边的组件列表来动态配置左边的页面视图 xff0c 并且左边由组件拼装起来的视图 xff0c 可以实现上下拖拽改变顺序 xff0c 也可以删
  • 项目时间管理

    项目进度管理知识领域中主要包括规划进度管理 定义活动 排列活动顺序 估算活动资源 估算活动持续时间 制定进度计划 控制进度等7个过程 一 规划进度管理 规划进度管理是为规划 编制 管理 执行和控制项目进度而制定政策 程序和文档的过程 规划进
  • 25.STP生成树协议介绍(链路收敛、拓扑变更)及缺点

    生成树协议 xff08 Spanning Tree Protocol xff0c STP xff09 是一种工作在OSI网络模型中的第二层 数据链路层 的通信协议 xff0c 基本应用是防止交换机冗余链路产生的环路 用于确保以太网中无环路的
  • Python2-openpyxl对Excel的操作(获取总行列数,获取某行值,获取某列值,设置单元格值)...

    from openpyxl import class excel def init self file self file 61 file self wb 61 load workbook self file sheets 61 self

随机推荐

  • GBT22239-2019等保2.0三级要求

    1 第三级安全要求 1 1 安全通用要求 1 1 1 安全物理环境 1 1 1 1 物理位置选择 本项要求包括 xff1a a 机房场地应选择在具有防震 防风和防雨等能力的建筑内 xff1b b 机房场地应避免设在建筑物的顶层或地下室 xf
  • linux网卡的vlan配置,linux增加vlan网卡配置

    1 编辑文件 etc sysconfig network 在里面添加一行 xff1a VLAN 61 yes 2 再生成网卡设备的配置文件ifcfg eth1 10和ifcfg eth1 240 cd etc sysconfig netwo
  • RYU控制器与Openstack集成-ofagent方案(1)

    随着云计算和SDN的应用越来越多 xff0c 对于SDN控制器的选择也有许多 xff0c 例如OpenDaylight RYU Floodlight和POX等 xff0c 我们先选择RYU与openstack集成作为研究方向 RYU作为Py
  • 浅谈UML学习笔记动态模型之序列图、协作图

    1 序列图 序列图和协作图都是交互图 xff0c 彼此等价 xff0c 可以相互转化 序列图是对对象之间传送消息的时间顺序的可视化表示 序列图用于表现交互 xff0c 侧重于强调时间顺序 序列图将交互关系表示为一个二维图 xff0c 如下图
  • No valid host was found. There are not enough hosts available

    root 64 dell PowerEdge T30 nova boot flavor m1 tiny image cirros nic net id 61 c2943fac a910 4cf6 b021 e8ab321965c9 secu
  • 校园网频繁断线、连不上网etc.

    这篇记录一下 Windows 下安装完 虚拟机 之后 xff0c 校园网 xff08 和其他网络 xff09 断线 xff0c 甚至无法连接到网络的情况 背景 xff1a 新装的系统 xff0c 网卡驱动什么的也都是刚装好的 xff0c 虚
  • JavaScript 笔记(3) -- JSON

    JavaScript JSON JavaScript Object Notation 是一种轻量级的数据交换格式 JSON 是用于存储和传输数据的格式JSON 通常用于服务端向网页传递数据 JSON 使用 JavaScript 语法 xff
  • 【转载】Notepad++使用技巧

    一 安装notepad 43 43 notepad 43 43 的下载 安装非常easy 下一步下一步 xff0c 所有选项都默认就可以安装好 但有几点需要注意 截止到写这篇博文 xff0c notepad 43 43 的最新版本为7 5
  • 0.1+0.2为什么不等于0.3

    首先 xff0c 对于不同的进制数值系统 xff0c 分母为多少时能除干净 xff1f 答案是当以前进制数的质因子为分母时 xff0c 以十进制为例 xff0c 它的质因子为2 5 xff0c 因此1 2 1 4 1 5 1 8和 1 10
  • git tag

    git tag的用法 git的tag功能 git 下打标签其实有2种情况 轻量级的 xff1a 它其实是一个独立的分支 或者说是一个不可变的分支 指向特定提交对象的引用带附注的 xff1a 实际上是存储在仓库中的一个独立对象 xff0c 它
  • 对web前端这门课程的期望

    对于这门课程 xff0c 我只希望我能过就行 xff0c 因为我将来可能不会从事着方面的工作 xff0c 但为了丰富自己的知识 xff0c 我还是觉得要认真的对待每一门学科 xff0c 这一门也不例外 xff0c 我希望我可以学的尽量好一点
  • ArcEngine安装并注册后应用程序无法使用toc等控件的解决办法

    安装了ArcEngine xff0c 并且用ecp注册过 但当放置toolbarcontrol TOCControl等控件在窗体上时 xff0c 提示 this control require an esri designer licens
  • Debian中安装使用sudo命令

    Debian中安装使用sudo命令 sudo可以让非root用户具有管理员的权限 xff0c 安装好的Debian后还不能使用sudo 需要使用root用户登陆后安装sudo命令 span style color 000102 span s
  • linux breakpad 编译,linux 平台编译googlebreakpad并测试 demo

    Linux googlebreakpad 编译 1 下载源码 源码包括两部分 xff0c 分为依赖库和 breakpad xff0c 网址一般会被屏蔽 xff0c 需要墙一下 另 xff0c 编译器需要支持 c 43 43 11 我用的gc
  • 233

    include lt bits stdc 43 43 h gt define reg register int define il inline define fi first define se second define mk a b
  • 再探容斥好题——ROOK

    这个时候考过 xff1a 安师大附中集训 Day2 当时看shadowice1984的做法 xff0c 但是没有亲自写 xff0c xff0c xff0c 雅礼集训考试的时候鼓捣半天 xff0c 被卡常到80pts xff0c 要跑9s 卡
  • CF908G New Year and Original Order

    CF908G New Year and Original Order gzz讲过 xff0c 可我到今天还是不会 有点trick的数位DP 比较显然的思路是 xff0c 考虑所有数中排序后每一位的贡献 cnt i x 表示S 1 S x 第
  • 本地在不安装Oracle的情况下安装PLSQL客户端

    本文解决问题 xff1a 通常在本地安装PLSQL后 xff0c 如果本地没有安装Oracle数据库的话 xff0c PLSQL是不能使用的 xff0c 输入远程数据库登录信息会提示 xff1a Oracle Client没有正确安装 这个
  • Ubuntu的中文乱码问题

    目标 xff1a 使系统 服务器支持中文 xff0c 能够正常显示 1 首先 xff0c 安装中文支持包language pack zh hans xff1a sudo apt get install language pack zh ha
  • Python argparse 处理命令行小结

    Python argparse 处理命令行小结 1 关于argparse 是python的一个命令行解析包 xff0c 主要用于处理命令行参数 2 基本用法 test py是测试文件 xff0c 其内容如下 import argparse