python 命令行参数解析 argparse简单分析
来源:互联网 发布:sql server inner join 编辑:程序博客网 时间:2024/06/05 18:59
from: python 命令行参数解析 argparse简单分析 - CSDN博客 http://blog.csdn.net/it_way/article/details/44815141
在python 2.7 后,不推荐使用 optparse, 而推荐使用 argparse.
其它的不多说,简单的分析下我遇到的问题:我是想用 argparse 来解析不定长的命令行参数
例如:
假设将上面的代码保存在 test.py 文件中,在命令行中做如下测试:
input: python test.py a b c -o1 d e -o2 f g h
output:
['test.py', 'a', 'b', 'c', '-o1', 'd', 'e', '-o2', 'f', 'g', 'h']
(Namespace(o1='d', o2='f', pos1=['a', 'b'], pos2='c', pos3=[]), ['e', 'g', 'h'])
input: python test.py a -o1 b c -o2 d e f g h
output:
['test.py', 'a', '-o1', 'b', 'c', '-o2', 'd', 'e', 'f', 'g', 'h']
(Namespace(o1='b', o2='d', pos1=[], pos2='a', pos3=[]), ['c', 'e', 'f', 'g', 'h'])
input: python test.py -o1 a b c -o2 d e f g h
output:
['test.py', '-o1', 'a', 'b', 'c', '-o2', 'd', 'e', 'f', 'g', 'h']
(Namespace(o1='a', o2='d', pos1=['b'], pos2='c', pos3=[]), ['e', 'f', 'g', 'h'])
input: python test.py -o1 a -o2 b c d e f g h
output:
['test.py', '-o1', 'a', '-o2', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
(Namespace(o1='a', o2='b', pos1=['c', 'd', 'e', 'f', 'g'], pos2='h', pos3=[]), [])
做如上四组测试,传入的参数都一样(唯一不一样的就是位置), 但是得到了不同的结果。
究其原因,这就是 argparse 模块的实现原理。 采用了正则匹配的方式 来解析参数(正则的说法属于个人理解,没有关注源码,如果有误,望更正)
在 add_argument 添加参数规则的时候,我们把带 '-' 的叫做选项参数,不带 '-' 的叫做位置参数。 下面我们以位置参数为例
在上面的代码中 通过 add_argument 添加了 pos1,pos2,pos3 三个位置参数,他们构成的 正则表达式为 A*AA*,其中A*代表匹配0个或多个值。
在测试例子1中的参数列表中,首先遇到位置参数 a b c ,这正好与 A*AA*的模式匹配,即 pos1=[a,b] pos2=c, pos3=[],因为A*AA*是贪婪匹配模式,即尽可能多的得到值,所以pos1=[a,b]而pos3=[]
在测试例子4中的参数列表中,A*AA* 匹配到参数列表中的 c d e f g h, 在贪婪匹配模式下,即可得到 pos1=[c,d,e,f,g], pos2=h, pos3=[]
通过分析上面两个例子,我们只需要记住 argparse 解析参数是根据 add_argument 添加的规则来进行模式匹配。就可以较好的理解解析的结果了!
最后,感谢博文 http://4byte.cn/question/347481/argparse-how-to-handle-variable-number-of-arguments-nargs.html 的分享
- python 命令行参数解析 argparse简单分析
- python 命令行参数解析 argparse简单分析
- python 命令行参数解析 argparse简单分析
- Python命令行参数解析:getopt和argparse
- [python] 命令行解析argparse
- argparse模块---解析命令行参数
- 使用argparse解析命令行参数
- python模块之argparse:强大的命令行参数解析模块
- python命令行参数解析模块argparse和docopt
- Python 引包 argparse 程序执行解析命令行参数介绍
- python命令行参数解析模块argparse和docopt
- Python 使用argparse模块解析命令行读取参数简介
- python 命令行解析模块 argparse
- python的命令行解析argparse
- python命令行解析工具argparse
- Python命令行解析库argparse
- 【Python模块】命令行解析--argparse
- python命令行解析工具Argparse
- 解决 s.dependency 'AFNetworking' 出现 Property with 'retain (or strong)' attribute must be of object typ
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- ansible 普通用户执行root权限 su
- linux安装APScheduler
- 基数排序
- python 命令行参数解析 argparse简单分析
- node 异步与同步读取文件
- SSM 之《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 分布式mysql中间件(mycat)
- Ubuntu14.04下Apache2+mod_jk+tomcat 配置Tomcat服务器集群负载均衡
- idea gradle 配置spring boot dev-tools热部署
- 优秀工程师-UICollectionView
- 客厅放一样东西会失去贵人,你一定要知道!
- 欢迎使用CSDN-markdown编辑器