• python基础之 optparse.OptionParser


    optparse是专门用来在命令行添加选项的一个模块。

    首先来看一段示例代码

    from optparse import OptionParser

    MSG_USAGE = "myprog[ -f ][-s ] arg1[,arg2..]"

    optParser = OptionParser(MSG_USAGE)

    optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")

    ooptParser.add_option("-v","--vison", action="store_false", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print options.fileName

    print options.verbose

    print options

    print args

    print optParser.print_help()

     

    输入结果为

    file.txt

    False

    {'verbose': False, 'fileName': 'file.txt'}

    ['this is some what', 'arg2', 'arge']

    Usage: myprog[ -f ][-s ] arg1[,arg2..]

    Options:

      -h, --help            show this help message and exit

      -f FILENAME, --file=FILENAME

      -v, --vison           make lots of noise [default]

     

     

    基本使用步骤

    1、 产生一个OptionParser的物件optParse。传入的值MSG_USAGE可被调用打印命令时显示出来。

    MSG_USAGE = "myprog[ -f ][-s ] arg1[,arg2..]"

    optParser = OptionParser(MSG_USAGE)

    2、 调用OptionParser.add_option()添加选项

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store_false", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    add_option()参数说明:

       action:存储方式,分为三种store、store_false、store_true

       type:类型(我也不知道什么的类型)

       dest:存储的变量

       default:默认值

       help:帮助信息

    3、 调用OptionParser.parse_args()剖析并返回一个directory和一个list。

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print options.fileName

    print options.verbose

    print options

    print args

    输出结果

    file.txt

    False

    {'verbose': False, 'fileName': 'file.txt'}

    ['this is some what', 'arg2', 'arge']

    parse_args()说明:

       如果没有传入参加,parse_args会默认将sys.argv[1:]的值作为默认参数。这里我们将   fakeArgs模拟输入的值。

    从返回结果中可以看到,

    l     options为是一个directory,它的内容fakeArgs为“参数/值 ”的键值对。

    l     args 是一个list,它的内容是fakeargs除去options后,剩余的输入内容。

    l     options.version和options.fileName都取到与options中的directory的值。

    4、 调用OptionParser.optParser.print_help()输出帮助信息

    optParser.print_help()

       显示返回结果

    Usage: myprog[ -f ][-s ] arg1[,arg2..]

    Options:

      -h, --help            show this help message and exit

      -f FILENAME, --file=FILENAME

      -v, --vison           make lots of noise [default]

    optParser.print_help()说明:

    1、最开始的的MSG_USAGE的值:在这个地方显示出来了。

    2、自动添加了-h这个参数。

         注:在MSG_USAGE中如果使用%prog,会被自动解析为sys.args[0] 也就是文件名。如将,MSG_USAGE = "%prog [options] arg1 arg2",假如文件名为   filexx,那么出现在help中的

    信息就是" filexx[options] arg1 arg2"。

     

     

    深入分析

    OptionParser.add_option()

    例:optParser.add_option("-v","--vison", action="store_false", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    参数action:

    存储方式,分为三种store、store_false、store_true。

    下面分别对三种方式进行说明:

    第一种:action = "store"

    1、如果输入的参数fakeArgs中存在"-v",则verbose返回的值为fakeArgs中的紧跟'-v'的数,即"good luck to you"。这也正好options中的键值对应,剩下配对的参数都传给了args。请见以下代码

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store", dest="verbose")

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print optParse.verbose

    print options

    print args

    输入结果

    good luck to you

    {'verbose': 'good luck to you', 'fileName': 'file.txt'}

    ['arg2', 'arge']

    2、如果输入的参数fakeArgs中不存在"-v",则verbose的返回值为None。

    示例代码:

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store", dest="verbose")

    fakeArgs = ['-f','file.txt','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print optParse.verbose

    print options

    print args

    输出结果

    None

    {'verbose': None, 'fileName': 'file.txt'}

    ['good luck to you', 'arg2', 'arge']

    第二种:action = "store_true"

    1、fakeArgs中存在'-v',verbose将会返回True而不是"good luck to you"。意思就是说verbose的值与'-v'

    的后一位无关,只与'-v'存不存在就关。

    示例代码

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store_true", dest="verbose")

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print optParse.verbose

    print options

    print args

    输出结果

    True

    {'verbose': True, 'fileName': 'file.txt'}

    ['good luck to you', 'arg2', 'arge']

    2、fakeArgs中不存在'-v',verbose同样返回空(我就不运行代码了)。

    第三种:action="store_false"

    这与action="store_true"类似,只有其中有参数'-v'存在,则verbose的值为False,如果'-v'不存在,那么verbose的值为None。

     

     

    参数:default

    optParser.add_option("-v","--vison", action="store_false", dest="verbose",default='gggggg')

    设置些参数是用于返回verbose的返回值。

    如果action="store",default='gggggg',代码如下。

    optParser.add_option("-v","--vison", action="store_false", dest="verbose",default='gggggg')

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    如果fakeArgs中存在'-v',则返回值为,"good luck to you"

    如果不存在'-v'则返回值为,"gggggg"

    如果action ="store_true",default='gggggg',代码如下。

    optParser.add_option("-v","--vison", action="store_true", dest="verbose",default='gggggg')

    如果fakeArgs中存在'-v',则返回值为True。

    如果fakeArgs中不存在'-v',则返回值为None

    再一次说明了,如果action="store_true"时,verbose的值只与是否'-v'有关。是否也说明了action_true的优先级高于default。

    注:action="store_false"的功能与此类似,返回为False或者None。再一次证明了

     

     

    参数:help

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    主要用于显示帮助信息,使用optParser.print_help()将帮助栏显示出来。

    在action="restore"时对比没使用help参数的'-f'与使用了help参数的'-v',多了一行帮助信息。

    Usage: myprog[ -f ][-s ] arg1[,arg2..]

    Options:

      -h, --help            show this help message and exit

      -f FILENAME, --file=FILENAME

      -v VERBOSE, --vison=VERBOSE

                            make lots of noise [default]

    在action="restore_false"时。

    optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    两个对比的输出结果如下

    Usage: myprog[ -f ][-s ] arg1[,arg2..]

    Options:

      -h, --help            show this help message and exit

      -f FILENAME, --file=FILENAME

      -v, --vison           make lots of noise [default]

     

     

    参数:type

      没有仔细测试,但知道一点时如果type="string"时,将无法使用action="store_false"和action="store_true"。不知是否可以将type理解成verbose的返回值类型。

    关于输入的的参数fakeArgs的说明

    还是用之前的代码分析

    from optparse import OptionParser

    MSG_USAGE = "myprog[ -f ][-s ] arg1[,arg2..]"

    optParser = OptionParser(MSG_USAGE)

    optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")

    optParser.add_option("-v","--vison", action="store", dest="verbose",default='gggggg',

                         help="make lots of noise [default]")

    fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    options, args = optParser.parse_args(fakeArgs)

    print options

    print args

    fakeArgs中的值对于各选项'-v','-f'来说都是前后两个值配对的。

    1、正常情况:

    结果如下

    则options的值为:     {'verbose':'good luck to you', 'fileName': 'file.txt'}

    args的值为:           ['arg2', 'arge']

    2、不正常情况:

    如果连续出现两个选项'-f','-v'。

    fakeArgs = ['-f','-v','good luck to you', 'arg2', 'arge']

    '-v'作为值传给了fileName。

    但verbose返回的是默认值'gggggg',如果没设置将会返回None。换句说话,就是没检测到参数'-v'的存在,这也再一次说明了,fakeArgs中键值配对的观念。前一个数作为选项,后一个作为值。

    结果如下:

    则options的值为:     {'verbose':'gggggg', 'fileName': '-v'}

    args的值为:           ['good luck to you','arg2', 'arge']

    3、如果多出一个'x'未被定义则程序会报错。

    fakeArgs = ['-x','-f','file.txt','-v','good luck to you', 'arg2', 'arge']

    好了,关于optParse这个模块就只学到了这些东西。

  • 相关阅读:
    vue 同页面不同参数
    vue的data用到this问题
    vue轮播,不是只有左右切换的,还有只切换src的
    vue页面高度填充,不出现滚动条
    WdatePicker做出onchange效果
    总结最近移动端遇到的坑(auto-size + zepto)
    react
    ES6-set && 数组剔重
    [置顶] Jquery easyui+Jsonp+asp.net+翻页 事件版
    扩展Jquery easyui的validator插件
  • 原文地址:https://www.cnblogs.com/jokerjason/p/5730064.html
Copyright © 2020-2023  润新知