Python3中使用argparse模块解析命令行参数
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 argumentargs = 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
GitHub:https://github.com/fengbingchun/Python_Test
Python3中使用argparse模块解析命令行参数相关推荐
- argparse模块---解析命令行参数
示例代码: argsparser_verify.py import argparse parser = argparse.ArgumentParser(description = 'Running A ...
- argparse用于解析命令行参数
文章目录 最简单的使用例子 创建ArgumentParser ArgumentParser参数 prog参数 usage参数 description&epilog描述 prefix_chars ...
- 3.QT中QCommandLineParser和QCommandLineOption解析命令行参数
1 新建项目 main.cpp #include <QCoreApplication> #include <QCommandLineParser> #include & ...
- python使用argparse解析命令行参数
python使用argparse解析命令行参数 你的程序如何能够解析命令行选项(位于sys.argv中) #示意使用sys.argv进行参数解析: #注意,sys.argv中第0个索引是函数本身,所以 ...
- Python 中的解析命令行参数
argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生 ...
- 如何在Java中解析命令行参数?
在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...
- C语言中使用库函数解析命令行参数
在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...
- python argparse 解析命令行参数
argparse包用于解析命令行参数, import argparse # parse parameter parser = argparse.ArgumentParser(description=' ...
- 在C#中解析命令行参数的最佳方法? [关闭]
构建带有参数的控制台应用程序时,可以使用传递给Main(string[] args) . 过去,我只是索引/循环该数组,并做了一些正则表达式来提取值. 但是,当命令变得更复杂时,解析可能会变得很丑陋. ...
最新文章
- 什么是类型别名?什么是潜在类型?
- python内存管理机制_[转] Python内存管理机制
- 无锡朗贤获B+轮融资,辰韬资本、兴韬投资领投
- 啥都不如烂笔头,约翰霍普金斯大学新研究:学外语还得用手写
- NOIP2001-普及组复赛-第一题-数的计算
- Python 网络爬虫笔记4 -- 信息标记与提取
- 个人博客网站的设计与实现_新手建立个人博客网站后如何提高回访率?
- ORACLE 数据库性能 与裸设备
- 复制Linux虚拟机后的网卡问题解决
- 数据:以太坊2.0合约余额新增2944 ETH
- [转]:xmake工程描述编写之选择性编译
- WebLogic如何设置session超时时间
- 快手短视频的流量及视频推荐算法解析,助你轻松上热门
- 家谱排版一般用什么软件
- 雅俗共赏——广告词之很美很强大的汉语言
- autojs之获取ip(内网ip和公网ip)
- 【日志】ubuntu16.04连接不上Logitech M590蓝牙鼠标(亲测可用)
- 杭州的旅游景点有哪些传说的民间故事
- 下一代IP协议----IPV6
- 【Python】程序员也可以很会撩:如何一键生成漂亮的生日快乐词云
热门文章
- java对接支付宝实现支付功能
- Android AR开发实践之二: Google ARCore介绍
- 瘟疫三生命计算与暗吸,绷带使用CD图
- 【腾讯云 Finops Crane 集训营】学习云原生成本优化
- 题目 1870: 统计字符数
- 小程序解析后端返回的html格式数据
- 致老罗:拿平庸的模仿来谈工匠精神?谈个锤子啊!
- 今日芯声 | AI+小学,人工智能要从娃娃“抓”起?
- 查看iPhone手机的UDID
- Windows编译Tensorflow2.2.0 C++ dll (CPU bazel)