python getopt使用

发布时间:2019-07-30 09:44:56编辑:auto阅读(1313)

    “hp:i:”
    短格式 --- ,
    
    ["help","ip=","port="]
    
    长格式 --- ,
    
    ,,比如 [('-i','127.0.0.1'),('-p','80')] ;
     ,包含那些‘-’或‘--’的参数,比如:['55','66']
    
    
    加号(+)是列表连接运算符,星号(*)是重复操作
    列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。
    
    list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
    tinylist = [123, 'john']
    
    。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。
    
    tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )
    tinytuple = (123, 'john')
    
    。字典由索引(key)和它对应的值value组成。
    ,字典是无序的对象集合
    字典当中的元素是通过键来存取的
    tinydict = {'name': 'john','code':6734, 'dept': 'sales'}

    下面代码


            opts, args = getopt.getopt(sys.argv[1:], 'd:p:t:')

            for op, value in opts:

                    if op == '-d':

                            m = re.search('[0-9]{8}', value)




    python 之 分割参数getopt

     

    os下有个方法walk,非常的好用,用来生成一个generator。每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。 
     1. 导入getopt, sys 模块 
    2. 分析命令行参数 
    3. 处理结果 

    第一步很简单,只需要: 
    import getopt, sys

    第二步处理方法如下(以Python 手册上的例子为例): 

    Python代码  收藏代码

    1. try:  

    2.     opts, args = getopt.getopt(sys.argv[1:]"ho:"["help""output="])  

    3. except getopt.GetoptError:  

    4.     # print help information and exit:  

     

    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 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串''


    6. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。 

    如上面解释的一个命令行例子为: 
    '-h -o file --help --output=out file1 file2'

    在分析完成后,opts 应该是: 
    [('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

    而args 则为: 
    ['file1', 'file2']
    第三步主要是对分析出的参数进行判断是否存在,然后再进一步处理。主要的处理模式为: 

    Python代码  收藏代码

    1. for o, a in opts:  

    2.     if o in ("-h""--help"):  

    3.         usage()  

    4.         sys.exit()  

    5.     if o in ("-o""--output"):  

    6.         output = a  

     


    使用一个循环,每次从opts 中取出一个两元组,赋给两个变量。o 保存选项参数,a 为附加参数。接着对取出的选项参数进行处理。(例子也采用手册的例子)

     

    实践篇:

    Python代码  收藏代码

    1. #!/usr/bin/env python  

    2.   

    3. import sys;  

    4. import getopt;  

    5.   

    6. def usage():  

    7.     print("Usage:%s [-a|-o|-c] [--help|--output] args...." %Dsys.argv[0]);  

    8.   

    9.   

    10. if "__main__" == __name__:  

    11.     #lsArgs = [""];  

    12.       

    13.     try:  

    14.         opts,args = getopt.getopt(sys.argv[1:]"ao:c", ["help""output="]);  

    15.       

    16.         print("============ opts ==================");         

    17.         print(opts);  

    18.       

    19.         print("============ args ==================");  

    20.         print(args);  

    21.           

    22.         #check all param  

    23.         for opt,arg in opts:  

    24.             if opt in ("-h""--help"):  

    25.                 usage();  

    26.                 sys.exit(1);  

    27.             elif opt in ("-t""--test"):  

    28.                 print("for test option");  

    29.             else:  

    30.                 print("%s  ==> %s" %(opt, arg));          

    31.           

    32.     except getopt.GetoptError:  

    33.         print("getopt error!");  

    34.         usage();  

    35.         sys.exit(1);  

     

    运行结果:

    $ ./test_getopt.py  -a -oaaa -caa --output=out file1 t file2 -d
    ============ opts ==================
    [('-a', ''), ('-o', 'aaa'), ('-c', ''), ('-a', ''), ('-a', ''), ('--output', 'out')]
    ============ args ==================
    ['file1', 't', 'file2', '-d']
    -a  ==> 
    -o  ==> aaa
    -c  ==> 
    -a  ==> 
    -a  ==> 
    --output  ==> out


    getopt是python中专门用来处理参数的一个模块,十分好用,下面提供一个小示例

    opts, args = getopt.getopt(sys.argv[1:], "t:s:h", ["walletype=", "servicename=",'help']) 
    for a,o in opts: 
    if a in ('-t', '--walletype'): 
    walle_type = o 
    elif a in ('-s', '--servicename'): 
    service_name = o 
    elif a in ('-h', '--help'): 
    help = True 

    其中t:s:h表示参数的缩写,:表示参数后需要传值 

    walletype=,servicename=,help表示参数的全称=表示后面需要传值  




    getopt模块用于抽出命令行选项和参数,也就是sys.argv
    命令行选项使得程序的参数更加灵活。支持短选项模式和长选项模式
    例如  python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b'


    import getopt, sys
    shortargs = 'f:t'
    longargs = ['directory-prefix=', 'format']
    opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )


    getopt.getopt ( [命令行参数列表], '短选项', [长选项列表] )


    短选项名后的冒号 : 表示该选项必须有附加的参数
    长选项名后的等号 = 表示该选项必须有附加的参数

    返回 opts 和 args
    opts 是一个参数选项及其value的元组 ( ( '-f', 'hello'), ( '-t', '' ), ( '--format', '' ), ( '--directory-prefix', '/home' ) )
    args 是一个除去有用参数外其他的命令行输入 ( 'a', 'b' )  


    # 然后遍历 opts 便可以获取所有的命令行选项及其对应参数了
    for opt, val in opts:
        if opt in ( '-f', '--format' ):
            pass
        if ....


    使用字典接受命令行的输入,然后再传送字典,可以使得命令行参数的接口更加健壮


    >>> import getopt, sys
    >>> arg = '-a -b -c foo -d bar a1 a2'
    >>> optlist, args = getopt.getopt( sys.argv[1:], 'abc:d:' )
    >>> optlist
    [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
    >>> args
    ['a1', 'a2']


    >>> arg = '--condition=foo --testing --output-file abc.def -x a1 a2'
    >>> optlist, args = getopt.getopt( sys.argv[1:], 'x', ['condition=', 'output-file=', 'testing'] )
    >>> optlist
    [ ('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x','') ]
    >>> args
    ['a1', 'a2']






    “hp:i:”
    短格式 --- ,
    
    ["help","ip=","port="]
    
    长格式 --- ,
    
    ,每个元祖是分析出来的格式信息,比如 [('-i','127.0.0.1'),('-p','80')] ;





    python 之 分割参数getopt

     

    os下有个方法walk,非常的好用,用来生成一个generator。每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。 
     1. 导入getopt, sys 模块 
    2. 分析命令行参数 
    3. 处理结果 

    第一步很简单,只需要: 
    import getopt, sys

    第二步处理方法如下(以Python 手册上的例子为例): 

    Python代码  收藏代码

    1. try:  

    2.     opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help""output="])  

    3. except getopt.GetoptError:  

    4.     # print help information and exit:  

     

    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 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串'' 。


    6. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。 

    如上面解释的一个命令行例子为: 
    '-h -o file --help --output=out file1 file2'

    在分析完成后,opts 应该是: 
    [('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

    而args 则为: 
    ['file1', 'file2']
    第三步主要是对分析出的参数进行判断是否存在,然后再进一步处理。主要的处理模式为: 

    Python代码  收藏代码

    1. for o, a in opts:  

    2.     if o in ("-h""--help"):  

    3.         usage()  

    4.         sys.exit()  

    5.     if o in ("-o""--output"):  

    6.         output = a  

     


    使用一个循环,每次从opts 中取出一个两元组,赋给两个变量。o 保存选项参数,a 为附加参数。接着对取出的选项参数进行处理。(例子也采用手册的例子)

     

    实践篇:

    Python代码  收藏代码

    1. #!/usr/bin/env python  

    2.   

    3. import sys;  

    4. import getopt;  

    5.   

    6. def usage():  

    7.     print("Usage:%s [-a|-o|-c] [--help|--output] args...." %Dsys.argv[0]);  

    8.   

    9.   

    10. if "__main__" == __name__:  

    11.     #lsArgs = [""];  

    12.       

    13.     try:  

    14.         opts,args = getopt.getopt(sys.argv[1:], "ao:c", ["help""output="]);  

    15.       

    16.         print("============ opts ==================");         

    17.         print(opts);  

    18.       

    19.         print("============ args ==================");  

    20.         print(args);  

    21.           

    22.         #check all param  

    23.         for opt,arg in opts:  

    24.             if opt in ("-h""--help"):  

    25.                 usage();  

    26.                 sys.exit(1);  

    27.             elif opt in ("-t""--test"):  

    28.                 print("for test option");  

    29.             else:  

    30.                 print("%s  ==> %s" %(opt, arg));          

    31.           

    32.     except getopt.GetoptError:  

    33.         print("getopt error!");  

    34.         usage();  

    35.         sys.exit(1);  

     

    运行结果:

    $ ./test_getopt.py  -a -oaaa -caa --output=out file1 t file2 -d
    ============ opts ==================
    [('-a', ''), ('-o', 'aaa'), ('-c', ''), ('-a', ''), ('-a', ''), ('--output', 'out')]
    ============ args ==================
    ['file1', 't', 'file2', '-d']
    -a  ==> 
    -o  ==> aaa
    -c  ==> 
    -a  ==> 
    -a  ==> 
    --output  ==> out




    在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。


    取得命令行参数

      在使用之前,首先要取得命令行参数。使用sys模块可以得到命令行参数。

    import sys

    print sys.argv


      然后在命令行下敲入任意的参数,如:

    python get.py -o t --help cmd file1 file2


      结果为:

    ['get.py', '-o', 't', '--help', 'cmd', 'file1', 'file2']


      可见,所有命令行参数以空格为分隔符,都保存在了sys.argv列表中。其中第1个为脚本的文件名


    选项的写法要求

      对于短格式,"-"号后面要紧跟一个选项字母。如果还有此选项的附加参数,可以用空格分开,也可以不分开。长度任意,可以用引号。如以下是正确的:

    -o

    -oa

    -obbbb

    -o bbbb

    -o "a b"

      对于长格式,"--"号后面要跟一个单词。如果还有些选项的附加参数,后面要紧跟"=",再加上参数。"="号前后不能有空格。如以下是正确的:


    --help=file1


      而这些是不正确的:

    -- help=file1

    --help =file1

    --help = file1

    --help= file1


    如何用getopt进行分析

      使用getopt模块分析命令行参数大体上分为三个步骤:


    1.导入getopt, sys模块

    2.分析命令行参数

    3.处理结果


      第一步很简单,只需要:

    import getopt, sys


      第二步处理方法如下(以Python手册上的例子为例):

    try:

        opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])

    except getopt.GetoptError:

        # print help information and exit:


    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是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没

    有附加参数则为空串''。


    6. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。


      如上面解释的一个命令行例子为:

    '-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"):

            output = a


      使用一个循环,每次从opts中取出一个两元组,赋给两个变量。o保存选项参数,a为附加参数。接着对取出的选项参数进行处理。(例子也采用手册的例子)





    getopt是python中专门用来处理参数的一个模块,十分好用,下面提供一个小示例:

     

    opts, args = getopt.getopt(sys.argv[1:], "t:s:h", ["walletype=", "servicename=",'help'])
    for a,o in opts:
        if a in ('-t', '--walletype'):
            walle_type = o
        elif a in ('-s', '--servicename'):
            service_name = o
        elif a in ('-h', '--help'):
             help = True

    其中t:s:h表示参数的缩写,:表示参数后需要传值

    walletype=,servicename=,help表示参数的全称,=表示后面需要传值 


关键字