《python处理命令行参数.pdf》由会员分享,可在线阅读,更多相关《python处理命令行参数.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Python 有两个内建的模块用于处理命令行参数,一个是有两个内建的模块用于处理命令行参数,一个是 getopt,Deep in python一书中也有提到,只能简单处理命令行参数;另一个是一书中也有提到,只能简单处理命令行参数;另一个是 optparse,它,它功能强大,而且易于使用,可以方便地生成标准的、符合功能强大,而且易于使用,可以方便地生成标准的、符合 Unix/Posix 规范的命令行说明。规范的命令行说明。示例示例 下面是一个使用下面是一个使用 optparse 的简单示例:的简单示例:from optparse import OptionParser.parser=Option
2、Parser()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=dont print status messages to stdout)(options,args)=parser.parse_args()现在,现在,?就可以在命令行下输入:就可以在命令行下输入:-file=outfile-q -f outfile-quiet -
3、quiet-file outfile -q-foutfile -qfoutfile 上面这些命令是相同效果的。除此之外,上面这些命令是相同效果的。除此之外,optparse 还为我们自动生成命令行的还为我们自动生成命令行的帮助信息:帮助信息:-h -help 输出:输出:usage:options options:-h,-help show this help message and exit -f FILE,-file=FILE write report to FILE -q,-quiet dont print status messages to stdout 简单流程简单流程 首先,必须
4、首先,必须 import OptionParser 类,创建一个类,创建一个 OptionParser 对象:对象:from optparse import OptionParser.parser=OptionParser()然后,使用然后,使用 add_option 来定义命令行参数:来定义命令行参数:parser.add_option(opt_str,.,attr=value,.)每个命令行参数就是由参数名字符串和参数属性组成的。如每个命令行参数就是由参数名字符串和参数属性组成的。如-f 或者或者?file 分别分别是长短参数名:是长短参数名:parser.add_option(-f,-f
5、ile,.)最后,一旦你已经定义好了所有的命令行参数,调用最后,一旦你已经定义好了所有的命令行参数,调用 parse_args()来解析程序来解析程序的命令行:的命令行:(options,args)=parser.parse_args()注:注:你也可以传递一个命令行参数列表到你也可以传递一个命令行参数列表到 parse_args();否则,默认使用;否则,默认使用 sys.argv:1。parse_args()返回的两个值:返回的两个值:*options,它是一个对象(,它是一个对象(optpars.Values),保存有命令行参数值。只要知道),保存有命令行参数值。只要知道命令行参数名,如
6、命令行参数名,如 file,就可以访问其对应的值:,就可以访问其对应的值:options.file。*args,它是一个由,它是一个由 positional arguments 组成的列表。组成的列表。Actions action 是是 parse_args()方法的参数之一,它指示方法的参数之一,它指示 optparse 当解析到一个命令行当解析到一个命令行参数时该如何处理。参数时该如何处理。actions 有一组固定的值可供选择,默认是有一组固定的值可供选择,默认是store,表示将,表示将命令行参数值保存在命令行参数值保存在 options 对象里。对象里。示例示例 parser.add
7、_option(-f,-file,action=store,type=string,dest=filename)args=-f,foo.txt(options,args)=parser.parse_args(args)print options.filename 最后将会打印出最后将会打印出“foo.txt”。当当 optparse 解析到解析到-f,会继续解析后面的,会继续解析后面的foo.txt,然后将,然后将foo.txt保存到保存到 options.filename 里。当调用里。当调用 parser.args()后,后,options.filename 的值就为的值就为foo.txt
8、。你也可以指定你也可以指定 add_option()方法中方法中 type 参数为其它值,如参数为其它值,如 int 或者或者 float 等等等:等:parser.add_option(-n,type=int,dest=num)默认地,默认地,type 为为string。也正如上面所示,长参数名也是可选的。也正如上面所示,长参数名也是可选的。其实,其实,dest 参参数也是可选的。如果没有指定数也是可选的。如果没有指定 dest 参数,将用命令行的参数名来对参数,将用命令行的参数名来对 options 对对象的值进行存取。象的值进行存取。store 也有其它的两种形式:也有其它的两种形式:s
9、tore_true 和和 store_false,用于处理带命令行参数,用于处理带命令行参数后面不带值的情况。如后面不带值的情况。如-v,-q 等命令行参数:等命令行参数:parser.add_option(-v,action=store_true,dest=verbose)parser.add_option(-q,action=store_false,dest=verbose)这样的话,当解析到这样的话,当解析到-v,options.verbose 将被赋予将被赋予 True 值,反之,解析到值,反之,解析到-q,会被赋予会被赋予 False 值。值。其它的其它的 actions 值还有:值
10、还有:store_const、append、count、callback。默认值默认值 parse_args()方法提供了一个方法提供了一个 default 参数用于设置默认值。如:参数用于设置默认值。如:parser.add_option(-f,-file,action=store,dest=filename,default=foo.txt)parser.add_option(-v,action=store_true,dest=verbose,default=True)又或者使用又或者使用 set_defaults():parser.set_defaults(filename=foo.txt
11、,verbose=True)parser.add_option(.)(options,args)=parser.parse_args()生成程序帮助生成程序帮助 optparse 另一个方便的功能是自动生成程序的帮另一个方便的功能是自动生成程序的帮助信息。你只需要为助信息。你只需要为 add_option()方法的方法的 help 参数指定帮助信息文本:参数指定帮助信息文本:usage=usage:%prog options arg1 arg2 parser=OptionParser(usage=usage)parser.add_option(-v,-verbose,action=store_
12、true,dest=verbose,default=True,help=make lots of noise default)parser.add_option(-q,-quiet,action=store_false,dest=verbose,help=be vewwy quiet(Im hunting wabbits)parser.add_option(-f,-filename,metavar=FILE,help=write output to FILE),parser.add_option(-m,-mode,default=intermediate,help=interaction mo
13、de:novice,intermediate,or expert default:%default)当当 optparse 解析到解析到-h 或者或者?help 命令行参数时,会调用命令行参数时,会调用 parser.print_help()打印程序的帮助信息:打印程序的帮助信息:usage:options arg1 arg2 options:-h,-help show this help message and exit -v,-verbose make lots of noise default -q,-quiet be vewwy quiet(Im hunting wabbits)-f
14、FILE,-filename=FILE write output to FILE -m MODE,-mode=MODE interaction mode:novice,intermediate,or expert default:intermediate 注意:注意:打印出帮助信息后,打印出帮助信息后,optparse 将会退出,不再解析其它的命令行参数。将会退出,不再解析其它的命令行参数。以上面的例子来一步步解释如何生成帮助信息:以上面的例子来一步步解释如何生成帮助信息:*自定义的程序使用方法信息(自定义的程序使用方法信息(usage message):):usage=usage:%prog
15、 options arg1 arg2 这行信息会优先打印在程序的选项信息前。当中的这行信息会优先打印在程序的选项信息前。当中的%prog,optparse 会以会以当前程序名的字符串来替代:如当前程序名的字符串来替代:如 os.path.basename.(sys.argv0)。如果用户没有提供自定义的使用方法信息,如果用户没有提供自定义的使用方法信息,optparse 会默认使用:会默认使用:“usage:%prog options”。*用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,optparse 会处理好这一切。会处理
16、好这一切。*设置设置 add_option 方法中的方法中的 metavar 参数,有助于提醒用户,该命令行参参数,有助于提醒用户,该命令行参数所期待的参数,如数所期待的参数,如 metavar=“mode”:-m MODE,-mode=MODE 注意:注意:metavar 参数中的字符串会自动变为大写。参数中的字符串会自动变为大写。*在在 help 参数的帮助信息里使用参数的帮助信息里使用%default 可以插入该命令行参数的默可以插入该命令行参数的默认值。认值。如果程序有很多的命令行参数,你可能想为他们进行分组,这时可以使用如果程序有很多的命令行参数,你可能想为他们进行分组,这时可以使用
17、 OptonGroup:group=OptionGroup(parser,Dangerous Options,Caution:use these options at your own risk.It is believed that some of them bite.)group.add_option(-g,action=store_true,help=Group option.)parser.add_option_group(group)下面是将会打印出来的帮助信息:下面是将会打印出来的帮助信息:usage:options arg1 arg2 options:-h,-help show
18、this help message and exit -v,-verbose make lots of noise default -q,-quiet be vewwy quiet(Im hunting wabbits)-fFILE,-file=FILE write output to FILE -mMODE,-mode=MODE interaction mode:one of novice,intermediate default,expert Dangerous Options:Caution:use of these options is at your own risk.It is b
19、elieved that some of them bite.-g Group option.显示程序版本显示程序版本 象象 usage message 一样,你可以在创建一样,你可以在创建 OptionParser 对象时,指定其对象时,指定其 version 参数,用于显示当前程序的版本信息:参数,用于显示当前程序的版本信息:parser=OptionParser(usage=%prog-f-q,version=%prog 1.0)这样,这样,optparse 就会自动解释就会自动解释?version 命令行参数:命令行参数:$/usr/bin/foo-version foo 1.0 处理
20、异常处理异常 包括程序异常和用户异常。这里主要讨论的是用户异常,是指因用户输入无效包括程序异常和用户异常。这里主要讨论的是用户异常,是指因用户输入无效的、不完整的命令行参数而引发的异常。的、不完整的命令行参数而引发的异常。optparse 可以自动探测并处理一些用可以自动探测并处理一些用户异常:户异常:$/usr/bin/foo-n 4x usage:foo options foo:error:option-n:invalid integer value:4x$/usr/bin/foo-n usage:foo options foo:error:-n option requires an ar
21、gument 用户也可以使用用户也可以使用 parser.error()方法来自定义部分异常的处理:方法来自定义部分异常的处理:(options,args)=parser.parse_args().if options.a and options.b:parser.error(options-a and-b are mutually exclusive)上面的例子,当上面的例子,当-b 和和-b 命令行参数同时存在时,会打印出命令行参数同时存在时,会打印出“options-a and-b are mutually exclusive“,以警告用户。,以警告用户。如果以上的异常处理方法还不能满足
22、要求,你可能需要继承如果以上的异常处理方法还不能满足要求,你可能需要继承 OptionParser 类,类,并重载并重载 exit()和和 erro()方法。方法。完整的程序例子完整的程序例子 from optparse import OptionParser.def main():usage=usage:%prog options arg parser=OptionParser(usage)parser.add_option(-f,-file,dest=filename,help=read data from FILENAME)parser.add_option(-v,-verbose,action=store_true,dest=verbose)parser.add_option(-q,-quiet,action=store_false,dest=verbose).(options,args)=parser.parse_args()if len(args)!=1:parser.error(incorrect number of arguments)if options.verbose:print reading%s.%options.filename .if _name_=_main_:main()