标签:
optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代。
但是用习惯了optparse,还是很好用的撒。
optparse使用起来,相比旧的getopt模块,更方便、灵活而且解析命令行选项的库功能强大。
optparse使用声明样式的命令行解析:你创建一个OptionParser实例,填充选项,并解析命令行。
optparse允许用户使用在传统GNU / POSIX语法的选项,而且会生成的使用和帮助信息(就是你没有显式的定义-h/--help也可以调用查看)。
1 from optparse import OptionParser
2 3 parser = OptionParser()
4 parser.add_option("-f", "--file", dest="filename",
5 help="write report to FILE", metavar="FILE")
6 parser.add_option("-q", "--quiet",
7 action="store_false", dest="verbose", default=True,
8 help="don‘t print status messages to stdout")
9
10 (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语法支持,还有一些奇葩语法也支持,或者少数派的。
optparse的option和option argument之间的空格必须有,但是能区分的情况下可以使用,-n10和-n 10是一样的
就是 -f disk和-fdisk(Linux/Unix允许,但optparse不),--file disk和--file=disk(Linux/Unix允许,但optparse不)
parser = OptionParser() 这就是创建一个OptionParser实例:
查看一下这个类有的方法:
1 >>> for a in dir(optparse.OptionParser): 2 ... if not a.startswith("_"): 3 ... print a 4 ... 5 add_option 6 add_option_group 7 add_options 8 check_values 9 destroy 10 disable_interspersed_args 11 enable_interspersed_args 12 error 13 exit 14 expand_prog_name 15 format_description 16 format_epilog 17 format_help 18 format_option_help 19 get_default_values 20 get_description 21 get_option 22 get_option_group 23 get_prog_name 24 get_usage 25 get_version 26 has_option 27 parse_args 28 print_help 29 print_usage 30 print_version 31 remove_option 32 set_conflict_handler 33 set_default 34 set_defaults 35 set_description 36 set_process_default_values 37 set_usage 38 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, 有几个常用的,
典型的:parser.add_option("-f", "--file", action="store", type="string", dest="name")
action指定在命令行参数中遇到一个选项(option)的时候应该怎么处理,默认的是store,就是将下一个参数在类型正确的情况下存到dest指定的中
action的值有以下这些:
如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表示值的类型限定:
metavar表示值得占位符
dest 表示要保存读取的值到哪里
default 设置默认值
help 是解释信息,解释你这个option是什么作用,注意事项是什么。
Note:
1. 处理布尔型,开关型的参数option,action指定为store_true或者store_false, default则指定默认是True还是False. 例如常用的-v,--verbose; -q,--quiet
OptionGroup
当然如果option有类别之分,最好将其分组,每个组表示相对功能比较统一的一组,也就涉及到分组问题,optparse是有的啦。
我是在看cufflinks的代码的时候,是用Python写的,发现这个的,然后才阅读optparse的documentation了解的。
其实就是:
注意:
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
标签:
原文地址:http://www.cnblogs.com/raybiolee/p/4225362.html