getopt模块(不推荐)
getopt 模块用于获取命令行选项和参数,也就是sys.argv。支持短选项模式(-)和长选项模式(--)。该模块提供了两个方法、两个属性及一个异常处理来解析命令行参数。
函数:
· getopt.getopt
· getopt.gnu_getopt
属性:
· getopt.error
· getopt.GetoptError
这两个属性主要是用来抛出错误信息的。
getopt.getopt 方法
getop模块的getopt 函数,抽取sys.argv获得的用户输入来确定执行步骤。语法格式如下:
getopt.getopt(args, options[, long_options])getopt.getopt( [命令行参数列表], "短选项", [长选项列表] )参数
args: 要解析的命令行参数列表。
options : 以字符串的格式定义,options 后的冒号 : 表示如果设置该选项,必须有附加的参数,否则就不附加参数。短参数使用的时候是参数名[空格]参数值
long_options : 以列表的格式定义,long_options 后的等号 = 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。长参数使用的时候是参数名=参数值
返回值
该函数返回两个值:opts和args。
opts为分析出的格式信息,是 (option, value) 元组的列表。存有所有选项及其输入值的元组。当输入确定后,这个值不能被修改了。每个元素为:( 选项串,附加参数) 。如果没有附加参数则为空串'' 。
args为不属于格式信息的剩余的命令行参数列表。
另外一个方法是 getopt.gnu_getopt,这里不多做介绍。
Exception getopt.GetoptError
在没有找到参数列表,或选项的需要的参数为空时会触发该异常。
异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。
官方介绍地址:
https://docs.python.org/3.1/library/getopt.html
实例
import getopt,sys
shortargs = 'f:t' #短选项
longargs = ['directory-prefix=', 'format', '--f_long='] #长选项
opts,args= getopt.getopt( sys.argv[1:], shortargs, longargs)
print('opts=',opts)
print('args=',args)
几种输出结果为:
分清longargs长选项里面的数据,是什么样的必须在前面追加--,不然出异常。例如
正确格式:----f_long='data'
错误格式:--f_long='data'
正确:
进阶
print(getopt.__doc__)
返回值
这个函数返回是一个两元组的列表(元组的值是不可修改的!)
import getopt
import sys
arg = getopt.getopt(sys.argv[1:],'-h',['help'])
print(arg)
结果如下:
root@Kali:~/python# python3.5 test.py -h
([('-h', '')], [])
root@Kali:~/python# python3.5 test.py --help
([('--help', '')], [])
root@Kali:~/python#
可以看到已经接收了参数。
因为sys.argv里的argv[0]是当前脚本的文件名,不需要它去参与,所以传入传入sys.argv[1:]。
实例1
假定创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时通过另外一个选项查看脚本的使用。脚本使用方法如下:
usage: test.py -i <inputfile> -o <outputfile>test.py 文件代码如下所示:
import sys, getoptdef main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) print(“opts:”,opts) print("args:",args) except getopt.GetoptError: print('Usage: 'test.py -i <inputfile> -o <outputfile>') sys.exit(2) for opt, arg in opts: print(opt,arg) if opt == '-h': print('Usage: test.py -i <inputfile> -o <outputfile>') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print('输入的文件为:', inputfile) print('输出的文件为:', outputfile)if __name__ == "__main__": main(sys.argv[1:])执行以上代码,输出结果为:
$ python test.py -husage: test.py -i <inputfile> -o <outputfile>$ python test.py -i inputfile -o outputfileopts: [('-o', 'output'), ('-i', 'input')]args: []-o output-i input输入的文件为: inputfile输出的文件为: outputfile代码解释:
a) sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。
b) "hi:o:": 当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。所以"hi:o:"就表示"h"是一个开关选项;"i:"和"o:"则表示后面应该带一个参数。
c) 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。
getopt函数的第三个参数[, long_options]为可选的长选项参数,上面例子中的都为短选项(如-i -o)
长选项格式举例:
--version
--file=error.txt
让一个脚本同时支持短选项和长选项
getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])
