Python 的命令行参数处理 optparse->argparse
optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代。
但是用习惯了optparse,还是很好用的撒。
optparse使用起来,相比旧的getopt模块,更方便、灵活而且解析命令行选项的库功能强大。
optparse使用声明样式的命令行解析:你创建一个OptionParser实例,填充选项,并解析命令行。
optparse允许用户使用在传统GNU / POSIX语法的选项,而且会生成的使用和帮助信息(就是你没有显式的定义-h/--help也可以调用查看)。
from optparse import OptionParser
2 parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout") (options, args) = parser.parse_args()
然后options保存一个dict对象,就是一个哈希表。arg就是剩下的参数了
optparse的option提供两种语法,就是短选项(short options)和长选项(long options)了
传统的Unix语法是一个连字符("-")后面紧跟一个字母,例如- x或- f。并且传统的Unix语法允许多个选项被合并成一个单一的参数,例如 ps -ef 相当于ps -e -f 。
GNU项目引入了"--"后面紧跟着一串可以用"-"分割的单词,像 --threads, --input-file-with-fq。
但是optparse功能强大支持就是,除了传统的option语法支持,还有一些奇葩语法也支持,或者少数派的。
- 支持以"+"开头紧跟字母单词的(+rgb)
- 支持以"-"开头但接多个字母的(和上面说的合并不是一回事,-pf)
- 支持以"-"但是接一个单词的(-file, -in, -out)
- 支持以"/"接单字母,多字母,单词的(这不就是MS-DOS的option语法吗,嘻嘻, dir /T /S /B /in /file)
optparse的option和option argument之间的空格必须有,但是能区分的情况下可以使用,-n10和-n 10是一样的
就是 -f disk和-fdisk(Linux/Unix允许,但optparse不),--file disk和--file=disk(Linux/Unix允许,但optparse不)
parser = OptionParser() 这就是创建一个OptionParser实例:
查看一下这个类有的方法:
>>> for a in dir(optparse.OptionParser):
... if not a.startswith("_"):
... print a
...
add_option
add_option_group
add_options
check_values
destroy
disable_interspersed_args
enable_interspersed_args
error
exit
expand_prog_name
format_description
format_epilog
format_help
format_option_help
get_default_values
get_description
get_option
get_option_group
get_prog_name
get_usage
get_version
has_option
parse_args
print_help
print_usage
print_version
remove_option
set_conflict_handler
set_default
set_defaults
set_description
set_process_default_values
set_usage
standard_option_list
OptionParser也可以指定参数呀,常用的usage等
usage (default: "%prog [options]") help的时候usage,表明程序的整体结构,不想显示的话,赋值usage=optparse.SUPPRESS_USAGE.
option_list (default: []) 已弃用,和add_option冗余
option_class (default: optparse.Option) add_option所使用的类
version (default: None) 默认是空,版本号不显示,True/False
conflict_handler (default: "error") 指定如果option有冲突的情况下如何处理
description (default: None) 在打印help的时候添加在usage后的一点介绍性文字
formatter (default: a new IndentedHelpFormatter) 打印help的时候的格式,可选IndentedHelpFormatter和TitledHelpFormatter.
add_help_option (default: True) 自动添加 -h和--help选项prog 默认值是 os.path.basename(sys.argv[0]),自定义usage和version中%prog
epilog (default: None) 打印help的时候添加在最后(option介绍之后)的一段说明文字
add_option方法使用
parser.add_option([short_option_str,long_option_str],attr_option_pair,...)
short_option_str和long_option_str,至少要有一个,可以有多个
attr_option_pair就是一组键值对attr=value, 有几个常用的,
- action 读取对应option的value后怎么处理
- dest 用哪个key引用(dict)或者理解为存到哪个变量中
- nargs 表示该option有几个值,默认是1,则对饮的dest存的就是tuple
- type 读取值得类型
- choices 给定该option的值得选择范围
- metavar 指定,option value的占位符
- default 默认值
- help 解释信息
- ...
典型的:parser.add_option("-f", "--file", action="store", type="string", dest="name")
action指定在命令行参数中遇到一个选项(option)的时候应该怎么处理,默认的是store,就是将下一个参数在类型正确的情况下存到dest指定的中
action的值有以下这些:
- store 默认的
- store_const 存为常量,必须指定const
- append 追加到一个列表
- append_const 加为常量,必须指定const
- count就是自加"++",每有一个加一次
- callback调用一个函数处理
- store_true 真值 对应True
- store_false 假值 对应False
- help 打印usage信息以及所有option的信息,以及注释信息
如store_const
parser.add_option("-q", "--quiet",action="store_const", const=0, dest="verbose")
parser.add_option("-v", "--verbose",action="store_const", const=1, dest="verbose")
parser.add_option("--noisy",action="store_const", const=2, dest="verbose")
type表示值的类型限定:
- string 接受为字符串类型 默认的
- int 识别为整型
- float 浮点型数字
metavar表示值得占位符
- 举个例子,打印help的时候,一般 -f FILE, --file FILE 中的FILE就是这个变量指定的
- 默认是把dest指定的内容,变成大写然后做占位符
dest 表示要保存读取的值到哪里
- 默认没有指定的话,是长选项(long option name)一致的,如果长的也没有,就用短选项的,反正长短总得有
default 设置默认值
- 就是即使没有指定这个Option或者它的值,dest指定的变量也会有值
- 更直接的办法是用set_defaults()方法
help 是解释信息,解释你这个option是什么作用,注意事项是什么。
- help可以使用%default来引用default指定的值 [2.4版开始]
- 若default没有指定,则引用%default的值为None
Note:
1. 处理布尔型,开关型的参数option,action指定为store_true或者store_false, default则指定默认是True还是False. 例如常用的-v,--verbose; -q,--quiet
OptionGroup
当然如果option有类别之分,最好将其分组,每个组表示相对功能比较统一的一组,也就涉及到分组问题,optparse是有的啦。
我是在看cufflinks的代码的时候,是用Python写的,发现这个的,然后才阅读optparse的documentation了解的。
其实就是:
- 将OptionParser实例parser传给OptionGroup,创建OptionGroup实例,如命名为group_dgr
- 在所创建的实例group_dgr中添加选项条目,用group_dgr.add_option("","","",...)。
- 将group_dgr添加到parser(OptionParser的实例)
- 重复1-3,指导所添加的组都添加完成。
- group_dgr = OptionGroup(parser,"Group Name","Group Description")
- group_dgr.add_option("-g","--group",action="store_true",help="",dest='',default=False)
- add more options if avialable
- parser.add_option_group(group_dgr)
注意:
1. OptionParser中有一个getter方法()是get_option_group(),就是输入option,输出option所在的OptionGroup
2. 最后添加完了之后要用parser.parse_args() 来解析,输入2个元素列表,第一个元素是个dict,第二个是list。
注意到OptionParser有很多的getter和setter可供使用
19 get_default_values
20 get_description
21 get_option
22 get_option_group
23 get_prog_name
24 get_usage
25 get_version
28 print_help
29 print_usage
30 print_version
对应的还有
32 set_conflict_handler
33 set_default
34 set_defaults
35 set_description
36 set_process_default_values
37 set_usage 可以不作为OptionParser的参数给定,然后通过此方法设置
38 standard_option_list
最后,还有错误处理,还有就打印个help需要这么麻烦吗。
Python 的命令行参数处理 optparse->argparse的更多相关文章
- python之命令行参数解析模块argparse
"""argparse模块使得写用户友好性命令行接口很容易,程序定义所需要的参数,argparse会从ays.argv中提取出这些参数.argparse模块也能自动的产生 ...
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- Python命令行参数解析模块argparse
当写一个Python脚本时经常会遇到不同参数不同功能的情况,如何做一个更好看的命令帮助信息以及对命令参数解析呢? 这就需要使用argparse模块 #!/usr/bin/env python # -* ...
- Python的命令行参数(argparse)
参考:https://www.cnblogs.com/lindaxin/p/7975697.html 参考:https://www.cnblogs.com/dengtou/p/8413609.html ...
- awk,perl,python的命令行参数处理
Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...
- python 处理命令行参数--转载
标题写了那么久,现在现在才有时间,整理下自己的思路.首先先总结下自己对sys模块的理解.手册上对sys的描述是系统参数和系统函数,这里的系统实际上是python解释器.这个模块提供了用户可以访问的解释 ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
- python处理命令行参数
直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...
- Python 获得命令行参数的方法
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?需要模块:sys参数个数:len(sys.argv)脚本名: sys.argv[0]参数1 ...
随机推荐
- 常用公共的css的样式
html{-webkit-text-size-adjust:none; /*解决chrome浏览器下字体不能小于12px*/} body{overflow-x: hidden; font-size:1 ...
- APICloud携技术入滇 助力互联网创业
在<相比北上广二三线城市创业有哪些优势? >一文中,小编深入探讨了目前二三线城市在互联网行业发展的现状,城市间的消费错位导致了二三线城市具有大规模的消费能力,促使互联网行业的逐步崛起.我们 ...
- php 使用 Memcache 例子
代码写成后不断的往数据库插入数据,可以发现 当set时:理论上速度变慢,但数据同步 当get时:理论上速度变快,但数据不同步,需要缓存失效后重新请求set方法 <?php $mem = new ...
- iOS网络协议 HTTP/TCP/IP浅析
一.TCP/IP协议 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...
- 在HTML中调用iOS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- asmdisk opened & asmdisk cached
ASMDISK OPENED - Disk is present in the storage system and is being accessed by Automatic Storage Ma ...
- mysql management note
related url : http://willvvv.iteye.com/blog/1563345 http://lxneng.iteye.com/blog/451985 这篇文章对vari ...
- mysql:键缓存
myisam的主要优化参数: key_buffer_size - 这对MyISAM表来说非常重要,是用来设置整个MySQL中常规Key Cache的大小.一般来说,如果MySQL运行在32位平台,此值 ...
- PAT 解题报告 1003. Emergency (25)
1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...
- java中的类修饰符、成员变量修饰符、方法修饰符。
类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. fin ...