python getopterror_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

68b5eee4a160322fa42ce0fe0d0cbe37.png

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)

执行结果

dc80035ee1d8c3ccc6b330b8f99d634c.png

参考文档: https://www.cnblogs.com/chushiyaoyue/p/5380022.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值