python工具包: argparse
title: python argparse module
date: 2018-02-19 12:41:41
tags: python
categories: python
当遇到需要参数的情况时,往往有以下三种处理方法***[1]***:
- 直接给定
这种方法实现起来方便,但是灵活性稍差,每次都需要打开源码修改。 - 手动解析
这种方法也算是比较常用,但是当参数过多时就显示出来不方便了,因为每次输入的格式以及参数的个数都必须一点不差。举个简单的小例子说明这种方法如何使用:
# python 代码-手动解析参数# 文件名称test.pyimport sysif __name__ == '__main__':print sys.argv[0]print "end"
$python test.py 1 test.py end
- 自动解析
相比上述两种方法,这种自动解析的方法更加灵活,且参数可以选择,顺序可以不确定,因此建议使用这种方法。其主要依赖python包argparse。
接下来主要介绍python命令行解析模块argpars ***[2][3]***:
1 简介
argparse
模块使得用户友好的命令行编程更加方便。首先定义程序中需要什么参数,然后argparse
会自动从sys.argv
中解析之前定义的参数。
argparse
还可以自动生成帮助文档,并且当用户输入错误的参数时自动报错。
1.1 来个例子
# python代码 - argparse 示例
# 代码名称: prog.py
import argparseparser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')args = parser.parse_args()
print(args.accumulate(args.integers))
命令行运行如下命令可以查看帮助信息:
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]Process some integers.positional arguments:N an integer for the accumulatoroptional arguments:-h, --help show this help message and exit--sum sum the integers (default: find the max)
使用合适的参数运行程序,可以得到输入参数的max或者sum,如果输入不合适的参数,则程序会直接报错,如下:
$ python prog.py 1 2 3 4
4$ python prog.py 1 2 3 4 --sum
10$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'
1.1.1 创建一个解释器
>>>parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
对象存储了解析命令行参数所需的所有信息。
1.1.2 添加参数
add_argument()
函数实现了将需要的参数添加到ArgumentParser
对象中。
这些调用告诉ArgumentParse
对象怎样提取命令行中的参数,并如何将其转化为所需的对象。This information is stored and used when parse_args()
is called. For example:
>>>parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')
>>>parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')
调用完parse_args()
函数后会返回两个对象,integers
和accumulate
。
integers
是一个或多个(list)int型的数;
accumulate
是一个sum()
函数(--sum
已调用),或者max()
(--sum
没调用)
1.1.3 解析参数
>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
注意: 在一个script中,parse_args()
函数一般不带参数直接调用,而参数是直接在命令行中给出,然后ArgumentParser
会在sys.argv
中自动解析相应的参数。
2 ArgumentParser对象
ArgumentParser
对象定义如下:
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
其每一个参数的定义如下:
prog - The name of the program (default: sys.argv[0])
默认情况下, ArgumentParser对象根据sys.argv[0]的值(不包括路径名)生成帮助信息中的程序名。usage - The string describing the program usage (default: generated from arguments added to parser)
默认情况下,ArgumentParser对象可以根据参数自动生成用法信息description - Text to display before the argument help (default: none)
description 用于展示程序的简要介绍信息,通常包括:这个程序可以做什么、怎么做。在帮助信息中 description位于用法信息与参数说明之间epilog - Text to display after the argument help (default: none)
与description类似,程序的额外描述信息,位于参数说明之后parents - A list of ArgumentParser objects whose arguments should also be included
有时多个解析器可能有相同的参数集,为了实现代码复用,我们可以将这些相同的参数集提取到一个单独的解析器中,在创建其它解析器时通过parents指定父解析器,这样新创建的解析器中就包含了相同的参数集。formatter_class - A class for customizing the help output
通过 formatter_class 可以定制帮助信息prefix_chars - The set of characters that prefix optional arguments (default: ‘-‘)
一般情况下,我们使用’-‘作为选项前缀,ArgumentParser也支持自定义选项前缀,通过prefix_charsfromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default: None)
argument_default - The global default value for arguments (default: None)
conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)
add_help - Add a -h/–help option to the parser (default: True)
是否禁用-h –help选项
个人认为常用的参数使用黑体标出,基本上如果没有特别需求就指定一下description就可以了。
官网和一些参考文献中都给出了每个参数的详细定义和具体使用方法,这里不在赘述。
3 add_argument()方法
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
各个参数含义如下:
name or flags - Either a name or a list of option strings, e.g. foo or -f, --foo.
指定一个可选参数或者位置参数。其中可选参数以-开头,剩下的是位置参数action - The basic type of action to be taken when this argument is encountered at the command line.
指定如何处理命令行参数nargs - The number of command-line arguments that should be consumed.
指定多个命令行参数和一个arcion相关联,具体见官方文档const - A constant value required by some action and nargs selections.
constant value,不是从命令行中读取,在某些特定action中需要指定。default - The value produced if the argument is absent from the command line.
如果参数可以缺省,default指定命令行参数不存在时的参数值。type - The type to which the command-line argument should be converted.
默认情况下,ArgumentParser对象将命令行参数保存为字符串。但通常命令行参数应该被解释为另一种类型,如 float或int。通过指定type,可以对命令行参数执行类型检查和类型转换choices - A container of the allowable values for the argument.
将命令行参数的值限定在一个范围内,超出范围则报错required - Whether or not the command-line option may be omitted (optionals only).
指定命令行参数是否必需,默认通过-f –foo指定的参数为可选参数。help - A brief description of what the argument does.
帮助文档metavar - A name for the argument in usage messages.
写帮助文档时可选的参数dest - The name of the attribute to be added to the object returned by parse_args().
dest 允许自定义ArgumentParser的参数属性名称
4 最后来个例子看一下用法
常用的参数基本都列出来了,接下来用Pytorch源码中的一个小例子演示用法:
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',help='input batch size for training (default: 64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',help='input batch size for testing (default: 1000)')
parser.add_argument('--epochs', type=int, default=10, metavar='N',help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',help='random seed (default: 1)')
parser.add_argument('--log-interval', type=int, default=10, metavar='N',help='how many batches to wait before logging training status')
args = parser.parse_args()
参考:
- python 中的argparse
- python命令行解析模块argparse
- 官方文档
1
1
1
python工具包: argparse相关推荐
- python使用argparse解析命令行参数
python使用argparse解析命令行参数 你的程序如何能够解析命令行选项(位于sys.argv中) #示意使用sys.argv进行参数解析: #注意,sys.argv中第0个索引是函数本身,所以 ...
- python工具包_python 工具包
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! hello,大家好! rose小哥今天主要介绍一下常见用来进行脑成像数据分析的p ...
- 机器学习模型可解释性的6种Python工具包,总有一款适合你!
开发一个机器学习模型是任何数据科学家都期待的事情.我遇到过许多数据科学研究,只关注建模方面和评估,而没有解释. 然而,许多人还没有意识到机器学习可解释性在业务过程中的重要性.以我的经验,商业人士希望知 ...
- python的argparse模块
使用步骤: 1:import argparse #导入argparse模块 2:parser = argparse.ArgumentParser() #创建实例 3:par ...
- Python的argparse
Python argparse module is the preferred way to parse command line arguments. Parsing command-line ar ...
- python神器排行_9款强大的Python工具包,第5款神器期待已久!
专注Python.AI.大数据 @七步编程 Python是一门简洁.优美且强大的编程语言,它的强大,很大一部分原因来自于丰富的第三方工具包. 通过这些第三方工具包,它可以轻松应对机器学习.数据分析. ...
- 优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)
目录 ▎标准PSO算法 ▎RDPSO算法 ▎标准PSO算法Python工具包 01 | 工具包适用范围 02 | 工具包安装方法 03 | 工具包使用实例 ▎参考文献 今天为各位讲解一种改进的粒子群优 ...
- python遍历argparse的parse_args()
python遍历argparse的parse_args()对象 由于我想把parse_args()对象的数据格式化后保存在log日志文件,于是我想要遍历解析器配置的参数. 简单通过for i in a ...
- 时间序列预测的7种Python工具包,总有一款适合你!
欢迎关注我,专注Python.数据分析.数据挖掘.实用工具! 时间序列问题是数据科学中最难解决的问题之一.传统的处理方法如 ARIMA.SARIMA 等,虽然是很好,但在处理具有非线性特性或非平稳时间 ...
- python自学argparse模块
argparse模块 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块 使用步骤 import argparse # 导入模块,这个没什么说的 ...
最新文章
- OpenJDK官方正式宣布AWT、2D、Swing等项目解散
- 深度学习与芯片之间的羁绊往事
- SAP SD如何将销售订单其它ITEM加入到一个已创建好的交货单里
- java中string.trim()函数
- 基于FPGA的AFDX接口实现
- PHP 底层的运行机制与原理 --转
- BZOJ 1097 [POI2007]旅游景点atr
- 工作191:loading不声明
- (24)FPGA开发必备(FPGA不积跬步101)
- 2018ACM-ICPC南京赛区网络赛: B. The writing on the wall
- 使用BeanPostProcessor为bean做后置处理
- 关于 IoT 的发展
- 用户使用什么命令访问远程计算机,远程桌面连接命令是什么 怎么使用命令连接远程服务器...
- 【广告算法工程师入门 26】机制设计-考虑客户ROI的机制设计方法与实践
- 【虚幻4】从U3D到UE4的转型之路
- Python (and、or、、 |) 用法
- java 日期格式化 英文_Java中使用SimpleDateFormat输出英文日期(原创)
- #304 – 为没有文本标题的控件定义Access 键(Defining an Access Key That Gives Focus to a Different Control)
- VB中关于UBOUND和LBOUND含义
- FP7195大功率内部转模拟全程无频闪调光DC-DC恒流芯片
热门文章
- Java_基础—readLine()和newLine()方法
- IEC_60068-2-64基本环境试验规程第2-64部分试验试验Fh振动、宽带随机抽样
- Python中的枚举enumerate
- Webpack支持.vue文件的打包
- System.Data.SQLite兼容32位和64位问题
- office2010安装报错
- (转) CCEditBox 编辑框
- learning scala pattern matching 03
- jenkins+maven+gitlab触发构建
- XLua访问C#中的List或者数组