python argparse(参数解析)模块学习(二)
转载自:http://www.cnblogs.com/fireflow/p/4841389.html(我去。。没转载功能,ctrl + c 和 ctrl + v 得来的,格式有点问题,可去原版看看)
add_argument()方法的定义了如何解析一个命令行参数,每个参数都有各自独立的设置参数。
>>> parser.add_argument('-f','--foo')
>>> parser.add_argument('bar')
>>> 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: too few arguments
2.action
action参数指定了参数是如何被处理的。支持额操作如下:
store:这个只是简单的存储这个参数值,这也是默认操作。
>>> parser=argparse.ArgumentParser() >>> parser.add_argument('--foo') >>> parser.parse_args('--foo 1'.split()) Namespace(foo='1')
>>> parser=argparse.ArgumentParser() >>> parser.add_argument('--foo',action='store_const',const=42) >>> parser.parse_args('--foo'.split()) Namespace(foo=42)
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_true') >>> parser.add_argument('--bar', action='store_false') >>> parser.parse_args('--foo --bar'.split()) Namespace(bar=False, foo=True)
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append') >>> parser.parse_args('--foo 1 --foo 2'.split()) Namespace(foo=['1','2'])
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--str', dest='types', action='append_const', const=str) >>> parser.add_argument('--int', dest='types', action='append_const', const=int) >>> parser.parse_args('--str --int'.split()) Namespace(types=[<type 'str'>,<type 'int'>])
>>>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
>>> classFooAction(argparse.Action): ... def__call__(self,parser,namespace,values,option_string=None): ... print'%r%r%r'%(namespace,values,option_string) ... setattr(namespace,self.dest,values) ... >>> parser=argparse.ArgumentParser() >>> parser.add_argument('--foo',action=FooAction) >>> parser.add_argument('bar',action=FooAction) >>> args=parser.parse_args('1 --foo 2'.split()) Namespace(bar=None, foo=None)'1'None Namespace(bar='1', foo=None)'2''--foo' >>> args Namespace(bar='1', foo='2')
>>> 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']) Note that ``nargs=1`` produces a list of one item.Thisis different from the default,in which the item is produced by itself.
>>> 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'.split()) Namespace(bar='XX', foo='YY') >>> parser.parse_args('XX --foo'.split()) Namespace(bar='XX', foo='c') >>> parser.parse_args(''.split()) Namespace(bar='d', foo='d')
另外一种情况是通过?来支持可选的输入输出文件。
>>> 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=<open file 'input.txt', mode 'r' at 0x...>, outfile=<open file 'output.txt', mode 'w' at 0x...>) >>> parser.parse_args([]) Namespace(infile=<open file '<stdin>', mode 'r' at 0x...>, outfile=<open file '<stdout>', mode 'w' at 0x...>)
"*":支持多个参数值。
>>> 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'])
"+" :跟*的作用类似,但是如果没有提供参数的会报错。
>>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', nargs='+') >>> parser.parse_args('a b'.split()) Namespace(foo=['a','b']) >>> parser.parse_args(''.split()) usage: PROG [-h] foo [foo ...] PROG: error: too few arguments
如果没有提供nargs参数的话,参数个数将由action来决定,默认情况下同单个参数。
4.const
const保存的值为不需要从命令行中读取但是对于ArgumentParser对象的action操作来说又必须的值。一般用于以下两个用途。
当action='store_const'或者action="append_const"的时候
当使用可选参数,并且narg=?的时候,并且命令行参数没有给出可选字符串以及可选参数的时候。
5.default
default设置默认值。如果可选参数没有提供可选字符串。则
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default=42) >>> parser.parse_args('--foo 2'.split()) Namespace(foo='2') >>> parser.parse_args(''.split()) Namespace(foo=42)
对于带nargs=?或者*的位置参数,当命令行参数没有提供的时候将使用默认值。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', nargs='?', default=42) >>> parser.parse_args('a'.split()) Namespace(foo='a') >>> parser.parse_args(''.split()) Namespace(foo=42)
如果提供default=argparse.SUPPRESS的话,这时不会有任何属性添加到命名空间。
6.type
默认情况下下,ArgumentParser将从命令行中读取的参数视为string类型,但是有时候也可以指定为其他类型。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) >>> parser.add_argument('bar', type=file) >>> parser.parse_args('2 temp.txt'.split()) Namespace(bar=<open file 'temp.txt', mode 'r' at 0x...>, foo=2)
为了简便文件参数的使用,argparser模块提供了FileType类工厂。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('bar', type=argparse.FileType('w')) >>> parser.parse_args(['out.txt']) Namespace(bar=<open file 'out.txt', mode 'w' at 0x...>)
type属性还可以接收一个回调函数,这个回调函数接收一个命令行参数并返回转换类型之后的值
>>>def perfect_square(string): ... value = int(string) ... sqrt = math.sqrt(value) ... if sqrt != int(sqrt): ... msg ="%r is not a perfect square"% string ... raise argparse.ArgumentTypeError(msg) ... return value ... >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', type=perfect_square) >>> parser.parse_args('9'.split()) Namespace(foo=9) >>> parser.parse_args('7'.split()) usage: PROG [-h] foo PROG: error: argument foo:'7'isnot a perfect square
如果提供choices参数的话,可以检测值的范围。
>>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', type=int, choices=xrange(5,10)) >>> parser.parse_args('7'.split()) Namespace(foo=7) >>> parser.parse_args('11'.split()) usage: PROG [-h]{5,6,7,8,9} PROG: error: argument foo: invalid choice:11(choose from5,6,7,8,9)
7.choices
有时候需要限制参数在某个范围之内,这时可以通过choices提供这个参数范围,如果提供的参数值不在这个范围之内,那么会报错。
>>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', choices='abc') >>> parser.parse_args('c'.split()) Namespace(foo='c') >>> parser.parse_args('X'.split()) usage: PROG [-h]{a,b,c} PROG: error: argument foo: invalid choice:'X'(choose from'a','b','c')
注意,如果包含type参数的话,只有type参数的条件满足之后才会检查给定的参数值是否在choices之内。
>>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', type=complex, choices=[1,1j]) >>> parser.parse_args('1j'.split()) Namespace(foo=1j) >>> parser.parse_args('-- -4'.split()) usage: PROG [-h]{1,1j} PROG: error: argument foo: invalid choice:(-4+0j)(choose from1,1j)
所有支持in运算符的对象都可以赋给choices,所以dict、set、list都可以。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', required=True) >>> parser.parse_args(['--foo','BAR']) Namespace(foo='BAR') >>> parser.parse_args([]) usage: argparse.py [-h][--foo FOO] argparse.py: error: option --foo is required
如果设置了required为真,并且也没有提供这个参数值,则报错。
>>> parser = argparse.ArgumentParser(prog='frobble') >>> parser.add_argument('--foo', action='store_true', ... help='foo the bars before frobbling') >>> parser.add_argument('bar', nargs='+', ... help='one of the bars to be frobbled') >>> parser.parse_args('-h'.split()) usage: frobble [-h][--foo] bar [bar ...] positional arguments: bar one of the bars to be frobbled optional arguments: -h,--help show this help message and exit --foo foo the bars before frobbling
help中可以使用格式化信息。例如
>>> parser = argparse.ArgumentParser(prog='frobble') >>> parser.add_argument('bar', nargs='?', type=int, default=42, ... help='the bar to %(prog)s (default: %(default)s)') >>> parser.print_help() usage: frobble [-h][bar] positional arguments: bar the bar to frobble (default:42) optional arguments: -h,--help show this help message and exit
10.metavar
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo') >>> parser.add_argument('bar') >>> parser.parse_args('X --foo Y'.split()) Namespace(bar='X', foo='Y') >>> parser.print_help() usage:[-h][--foo FOO] bar positional arguments: bar optional arguments: -h,--help show this help message and exit --foo FOO
除此之外,还可以通过metavar指定别名。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', metavar='YYY') >>> parser.add_argument('bar', metavar='XXX') >>> parser.parse_args('X --foo Y'.split()) Namespace(bar='X', foo='Y') >>> parser.print_help() usage:[-h][--foo YYY] XXX positional arguments: XXX optional arguments: -h,--help show this help message and exit --foo YYY
注意metavar只改变显示的名字,不同的nargs参数值,可能导致metavar参数需要使用多次,这时可以提供metavar参数来生成不同的显示。
1 >>> parser = argparse.ArgumentParser(prog='PROG') 2 >>> parser.add_argument('-x', nargs=2) 3 >>> parser.add_argument('--foo', nargs=2, metavar=('bar','baz')) 4 >>> parser.print_help() 5 usage: PROG [-h][-x X X][--foo bar baz] 6 optional arguments: 7 -h,--help show this help message and exit 8 -x X X 9 --foo bar baz
11.dest
ArgumentParser对象通过dest来指定要传入的参数值。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('bar') >>> parser.parse_args('XXX'.split()) Namespace(bar='XXX')
对于可选参数,dest的值根据可选参数的不同而相应改变,如果是完整字符串,使用去掉--前缀之后的字符串,如果是简短名,则使用去除-前缀之后的字符串,如果字符串中间带有-,则将-替换成_以使这个字符串合法。
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('-f','--foo-bar','--foo') >>> parser.add_argument('-x','-y') >>> parser.parse_args('-f 1 -x 2'.split()) Namespace(foo_bar='1', x='2') >>> parser.parse_args('--foo 1 -y 2'.split()) Namespace(foo_bar='1', x='2')
dest允许设置自定义名字:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', dest='bar') >>> parser.parse_args('--foo XXX'.split()) Namespace(bar='XXX')
转载于:https://www.cnblogs.com/gexbooks/p/8675150.html
python argparse(参数解析)模块学习(二)相关推荐
- python argparse type_python argparse(参数解析模块)
这是一个参数解析,可以用它快捷的为你的程序生成参数相关功能 import argparse(导入程序参数模块) # 创建argparse对象,并将产品简要说明加入 show = '程序说明' ===& ...
- python urllib2模块安装,Python urllib和urllib2模块学习(二)
一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...
- Python命令行参数解析模块getopt使用实例
这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...
- python getopt使用_Python命令行参数解析模块getopt使用实例
这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...
- python的argparse参数解析
参考资料: https://www.youtube.com/watch?v=cdblJqEUDNo&t=298s 不方便用梯子的也可以看B站: Python argparse命令行参数解析包的 ...
- 以optee的sign_encrypt.py为例讲解argparse命令解析模块
Argparse是 Python 标准库中推荐的命令行解析模块.该模块会自动生成提示信息,且在用户给程序传入非法参数时报错. 刚好最近在看optee的sign_encrypt.py,以它为例介绍pyt ...
- python 的日志logging模块学习
2019独角兽企业重金招聘Python工程师标准>>> python 的日志logging模块学习 分类: python 2011-08-02 23:51 8338人阅读 评论(0) ...
- Python命令行参数解析模块------argparse
首先,argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广 ...
- python参数解析模块_Python系列教程(三十七):参数解析模块argparse
使用python写出的脚本在运行的时候,是可以传递参数的,一般会使用sys.argv[]来接收用户传的参数.但是如果要实现类似于linux命令的,比如'ls -l -t /etc/'这种比较复杂的选项 ...
- python 命令行解析模块_【Python模块】命令行解析--argparse
python命令行解析 前言 当你还在使用 if len(sys.argv) > 1: 这样的方式判断选项和参数的时候,是否已意识到已经落伍了. 我在bash中用过getopt getopts, ...
最新文章
- caffe-cuda测试
- Spring3.2新注解@ControllerAdvice
- CentOS 6.7构建 OpenResty(Nginx)+PHP 7(php-fpm)+MySQL5.7 运行环境
- Tensorflow(0)--Tensorboard
- 【报告分享】2019云安全威胁报告.pdf(附下载链接)
- python-学生管理系统--6 搜索功能模块
- linux I2C读写应用程序
- ArcFace 论文阅读及 pytorch 实现
- 计算机中的根源证书是什么,安全证书过期怎么办
- 罗技无线键盘Windows和Ubuntu下锁定Fn键方法
- 融新聚力,筑梦畅行|云畅科技“融云计划”第一期集训营圆满结营
- Win7+修改管理员账户Administrator名字的方法
- 这家200多年历史的中华老字号,是如何赢得今年快手中秋月饼品牌冠军的?
- micropython 蓝牙音箱_Arduino从入门到创客带师(-1)—Hello World!
- 【深度学习之美02】深度学习的方法论是什么?
- php 控制304,php静态文件返回304技巧分享,_PHP教程
- 汇丰银行面试--软件测试面试题
- 将docker镜像推送到阿里云镜像仓库
- lightroom 闪退_Lightroom从入门到精通系统课程,提升您图片后期处理的速度
- esp8266接入机智云
热门文章
- @Component,@Bean
- wsdl2java生成客户端代码_利用wsdl2java工具生成webservice的客户端代码
- 获取所有task_Asp.Net Core 轻松学-多线程之Task快速上手
- 北大生物信息学学习(2) 生物学及生物学信息学的发展
- fft 相位谱_数值积分——使用FFT来降低计算量
- mysql数据库视图_MySQL数据库8(二十)视图
- 请说明指令周期、机器周期、时钟周期之间的关系。
- C语言:计算1!+2!+3!+...+100!
- 定义斜体文本的html标签,HTML 文本格式化
- 文件--非连续空间存放方式