本文研究的主要是Python命令行解析模块的相关内容,具体如下。
Python命令行常见的解析器有两种,一是getopt模块,二是argparse模块。下面就解读下这两种解析器。
这个模块可以帮助脚本解析命令行参数,一般是sys.argv[1:]。它遵循着Unix的getopt()函数相同的约定(用-/--指定命令参数)。这个模块提供两个函数(getopt.getopt()/getopt.gnu_getopt())和一个参数异常(getopt.GetoptError)。
这里重点介绍getopt.getopt()这个函数。
函数原型:getopt.getopt(args, options[, long_options])
这个函数有三个参数:
当给定的命令行参数解析不了的话,就会抛出GetoptError异常。
函数的返回值包含两个元素:
下面看几个Demo:
短选项:
>>> importgetopt>>> args='-a -b -cfoo -d bar a1 a2'.split()>>> args['-a', '-b', '-cfoo', '-d', 'bar', 'a1','a2']>>> optlist, args= getopt.getopt(args,'abc:d:')>>> optlist[('-a', ''), ('-b', ''), ('-c', 'foo'),('-d', 'bar')]>>> args['a1', 'a2']
长选项:
>>> s='--condition=foo --testing --output-file abc.def -x a1 a2'>>> args= s.split()>>> args['--condition=foo', '--testing','--output-file', 'abc.def', '-x', 'a1', 'a2']>>> optlist, args= getopt.getopt(args,'x', [... 'condition=','output-file=','testing'])>>> optlist[('--condition', 'foo'), ('--testing', ''),('--output-file', 'abc.def'), ('-x', '')]>>> args['a1', 'a2']
在脚本当中经典的应用实例:
importgetopt,sys defmain(): try: opts, args = getopt.getopt(sys.argv[1:],"ho:v", ["help","output="]) except getopt.GetoptErroras err: # print help information and exit: printstr(err) # will print something like "option -a not recognized" usage() sys.exit(2) output =None verbose =False for o, a in opts: if o =="-v": verbose =True elif o in ("-h","--help"): usage() sys.exit() elif o in ("-o","--output"): output = a else: assertFalse,"unhandled option" # ... if __name__ =="__main__": main()
argparse模块使得编写用户友好的命令行接口非常容易。程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生错误信息。
新闻热点
疑难解答