python之getopt
Posted stay hungry stay foolish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之getopt相关的知识,希望对你有一定的参考价值。
getopt可以分析输入的参数,根据不同的参数输入不同的命令
getopt.getopt( [命令行参数列表], "短选项", "长选项列表" )
getopt这个函数,就是用来抽取sys.argv获得用户输入来确定后续操作的
getopt是一个模块,而这个模块里面又有getopt函数,
函数返回2个值 opts 和 args
opts是一个存有所有选项及其输入值的元组,当输入确定后,这个值就不能更改了
args是除去有用的输入以后剩余的部分
#!/usr/bin/env python2.6 # coding: utf-8 import getopt import sys shortargs = \'f:t\' #短选项 longargs = [\'nocolor\', \'format\', \'--f_long\', \'---f_longlong=\'] opts, argv = getopt.getopt( sys.argv[1:] , shortargs, longargs) opts = dict(opts) print opts print argv
1 短选项名后面的冒号: ,表示该选项必须要有附加的参数如 -f fir; 如果不加冒号,不会讲参数放到args中,如-t long
2 长选项里面的数据,需要在前面加--,不然报异常;有等号说明要有参数,例如--format(正确) --format=1(错误)
选项的写法
对于短选项。“-"号后面要紧跟一个选项字母,如果此选项还有额外参数,可以用空格分开,也可以不分开,长度任意,可以用引号,下面是正确的
-o
-oa
-obbbb
-o "a b"
对于长选项,“--”后面要跟一个单词,如果还有此选项的额外参数,后面要紧跟”=“,再加上参数,注意”=“的前后不能有空格,下面是正确的写法
--help=man
不正确的写法
-- help=file
--help =file
--help = file
--help= file
如何使用getopt进行分析
使用getopt模块分析命令行参数大体上分为三个步骤
1 导入getopt,sys模块
2 分析命令行参数
3 处理结果
#!/usr/bin/env python2.6 # coding: utf-8 import getopt,sys try: opts, args = getopt.getopt( sys.argv[1:], "ho:", [ "help", "output="] ) except getopt.GetoptError: # print help information and exit: print \'error\' sys.exit(0) print opts print args
1 处理所使用的函数是getopt,因为是直接import导入的getopt模块,所以加上限定getopt才可以
2 使用sys.argv[1:] 过滤掉第一个参数(它是执行脚本的名字,不应算作参数的一部分)
3 使用短选项分析串”ho:“,当第一个选项只是表示开关状态时,后面不带附加参数时,在分析串写入选项字符,当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号,所以"ho:",就表示"h"是一个开关选项,"o:"表示后面应该带一个参数
4 使用长选项分析串列表:["help","output="],长选项串也有开关状态,即后面不用"="号,如果跟一个"="号则表示后面应有一个参数,这个长格式表示"help"是一个选项开关;"output="则表示后面应该带一个参数
5 调用getopt函数,函数返回两个列表,opts和args,opts为分析出的格式信息,args为不属于格式信息的剩余的命令行参数,opts是一个二元组的列表,每个元素为(选项串,附加参数),如果没有附加参数则为空串
一个栗子
\'-h -o file --help --output=out file1 file2\'
在分析完成之后,opts应该是:
[ ( \'-h\',\'\' ), ( \'-o\',\'file\' ), ( \'--help\', \'\' ), ( \'--output\', \'out\' ) ]
而args是:
[ \'file1\', \'file2\' ]
下面是对分析出的参数进行判断存在,然后做下一步处理,
for o, a in opts: if o in ("-h", "--help"): #usage() #处理函数 sys.exit() if o in ("-o", "--output"): # 处理函数 sys.exit()
使用一个循环,每次从opts中取出一个二元组,赋给两个变量,o保存选项参数,a为附加参数,判断是否存在,近一步处理
完整代码:
#!/usr/bin/env python2.6 # coding: utf-8 import getopt, sys def usage(): print "Usage:%s [ -a|-o|-c ] [ --help|--output ] args..." %( sys.argv[0] ) if __name__ == \'__main__\' : try : shortargs = \'f:t\' longargs = [ \'directory-prefix=\', \'format\', \'--f_long=\' ] opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs ) print \'***********************opts**********************\' print \'opts=\', opts print \'***********************args**********************\' print \'args=\', args for opt, arg in opts: if opt in ( \'-h\', \'--help\' ): usage() sys.exit(1) elif opt in ( \'--f_long\' ): print \'--f_long=\', opt else: print \'%s==========>%s\' %( opt, arg ) except getopt.GetoptError: print \'getopt error\' usage() sys.exit(1)
执行结果
参考文档: https://www.cnblogs.com/chushiyaoyue/p/5380022.html
以上是关于python之getopt的主要内容,如果未能解决你的问题,请参考以下文章