Python 处理脚本的命令行参数-getopt

# -*- coding:utf-8 -*-
import sys

def test():
    """
    参数列表:sys.argv
    参数个数:len(sys.argv) 
    脚本名: sys.argv[0] 
    参数1:  sys.argv[1] 
    参数2:  sys.argv[2]
    """
    print "参数个数为:"+ str(len(sys.argv))
    print "参数列表为:"+ str(sys.argv)
    print "脚本名为:"+ sys.argv[0]
    for i in range(1, len(sys.argv)):
        print ""+str(i)+"个参数:"+sys.argv[i]
    
test()

Q: 如何识别到命令行选项(-u, -p)呢

A: getopt模块,支持短选项模式(-)和长选项模式(-)

1. getopt.getopt 方法:

getopt.getopt 方法用于解析命令行参数列表,语法格式如下:

getopt.getopt(args, options[, long_options])

方法参数说明:

  • args: 要解析的命令行参数列表。

  • options: 以字符串的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。

  • long_options: 以列表的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。

  • 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有’-‘或’–’的参数

2 Exception getopt.GetoptError

在没有找到参数列表,或选项的需要的参数为空时会触发该异常。

异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。

3. 例子:

def getCmdPar(argv):
    """
        通过命令行得到脚本传递参数
    """

    plattype_cmd = ''
    version_cmd = ''

    try:
        """
            options, args = getopt.getopt(args, shortopts, longopts=[])

            参数args:一般是sys.argv[1:]。过滤掉sys.argv[0],它是执行脚本的名字,不算做命令行参数。
            参数shortopts:短格式分析串。例如:"ht:v:",h后面没有冒号,表示后面不带参数;t和v后面带有冒号,表示后面带参数。
            参数longopts:长格式分析串列表。例如:["help", "type=", "version="],help后面没有等号,表示后面不带参数;type和version后面带冒号,表示后面带参数。

            返回值options是以元组为元素的列表,每个元组的形式为:(选项串, 附加参数),如:('-i', '192.168.0.1')
            返回值args是个列表,其中的元素是那些不含'-'或'--'的参数。
        """
        opts, args = getopt.getopt(argv, "ht:v:", ["help", "type=", "version="])
    except getopt.GetoptError:
        print('Error: installTest.py -t <type> -v <version>')
        print('   or: installTest.py --type=<type> --version=<version>')
        sys.exit(2)
    
    # 处理 返回值options是以元组为元素的列表。    
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print(u'installTest.py -t <type> -p <version>')
            print(u'or: installTest.py --type=<type> --version=<version>')
            sys.exit()
        elif opt in ("-t", "--type"):
            plattype_cmd = arg
            #plattype.append(re.split('[,]', arg)) 
        elif opt in ("-v", "--version"):
            version_cmd = arg
            #version.append(re.split('[,]', arg)) 
    return plattype_cmd, version_cmd

 

posted @ 2018-12-07 16:07  蒋励  阅读(536)  评论(0编辑  收藏  举报