美文网首页pythonpython小册Python
Python - OptParse 分析命令行输入模块

Python - OptParse 分析命令行输入模块

作者: fuyoufang | 来源:发表于2017-07-09 15:31 被阅读916次

    要自己定制程序的参数选项控制, 可以使用 Python 自带的 OptParse 模块。

    import optparse
    

    也可以直接解析 sys.argv 里的参数,但是过于麻烦。

    OptParse 支持一般性 GNU 的选项方法,包括:

    • 无参选项, -v
    • 有参选项, -p value, –para=value
    • 值参一体, -pvalue (不支持长参数)
    • 合并选项, -abc, -abcp value (最后一个可以是有参, 其余均无参)

    解析时,--- 的区别:

    • - 就看后面的值, 要是无参的, 那继续读下一个; 要是有参的,就把参数读进来(分隔或一体).
    • -- 直接读后面的值;

    optparse 现在不再更新了,更新版本叫 argparse.

    optparse module

    基本用法:

    1. 载入OptionParser类,新建对象: OptionParser()
    2. 添加选项: add_option(…)
    3. 参数解析: parse_args()
    from optparse import OptionParser
    
    # 一个帮助文档解释字符串
    hstr = '%prog custom help string'
    parser = OptionParser(hstr, description='custom description', version='%prog 1.0')
    parser.add_option('-i', '--input', action='store', dest='input', help='read input data from input file')
    parser.add_option('-o', '--output', action='store', dest='output', help='write data to output file')
    parser.add_option('-q', '--quite', action='store_false', dest='version', help='don\'t print the version')
    # parser.add_option('-v', '--version', action='store_true', dest='version', default=False, help='print the version')
    # parser.add_option('-v', '--version', action='store_true', dest='version', help='print the version')
    
    parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')
    parser.add_option('-a', '--add', action='append', dest='add', help='add to handle')
    parser.add_option('-c', '--count', action='count', dest='count', help='count to handle')
    parser.add_option('-d', '--count1', action='count', dest='count', help='count1 to handle')
    
    #parser.add_option('-v', '--version', dest='version')
    
    # if parser.has_option('-f'):
    #     print('content -f')
    #     parser.set_default('-f', 'myFile')
    #     parser.remove_option('-f')
    #
    # if not parser.has_option('-f'):
    #     print('do not content -f')
    
    
    # 用一个数组模拟命令参数
    #testArgs = ['-i', 'someForInput', '-f', 'someForFile', '-vq', '-a', 'test1 test2 test3', '-c', '-d']
    testArgs = [ '-i', 'someForInput', 'someForFile', 'someForFile1', '-q', '-a', 'test1 test2 test3', '-c', '-d', '-h']
    options, args = parser.parse_args(testArgs)
    
    print('options : %s' % options)
    print('args : %s' % args)
    
    if options.input:
        print('input in args : %s' % options.input)
    
    if options.version:
        print('version 1.0.0')
    
    # if options.file:
    #     print('file in args : %s' % options.file)
    
    if options.add:
        print('add in args : %s' % options.add)
    
    print('version in args', options.version)
    
    

    新建对象

    parser=OptionParser()

    形参包括:

        def __init__(self,
                     usage=None,
                     option_list=None,
                     option_class=Option,
                     version=None,
                     conflict_handler="error",
                     description=None,
                     formatter=None,
                     add_help_option=True,
                     prog=None,
                     epilog=None):
    

    新建选项

    可以使用:add_option, add_option_group, add_options.

    add_option(…):
    add_option 方法中前面的参数为命令的选项, 可以为等价的短名或者长名,一般是前面为短名,后面为长名.

    可以配置的参数有以下:

    • dest: 可以决定解析后,取值时的属性名, 尤其适于有多个等价参数. 不指定时就是选项不加-的字符串.
    • type: 选项的值类型,值的默认类型是字符串, 这里将值指定为其他类型.
    • default: 缺省值. 没有设置缺省值的为None.
    • help: 选项中有 -h 时打印的 help 信息.
    • metavar: 表示显示到 help 中选项的默认值;
    • choices: 当 type 设置为 choices 时,需要设置此值.
    • const: 指定一个常量值给选项, 该常量值将用于后面store_const和append_const,一起合用.
    • action: 用于控制对选项和参数的处理,像无参数选项处理,可以设置为以下几种字符串:
      • "store": 储存值到 dest 指定的属性,强制要求后面提供参数;
      • "store_true": 当使用该选项时,后面的 dest 将设置为 true, 不跟参数.
      • "store_false": 当使用该选项时,后面的 dest 将设置为 false. 常配合另一个 "store_true" 的选项使用同一个 dest 时使用. 不跟参数.
      • "append": 储存值到 dest 指定的属性,并且是以数组的形式, 必须跟参数.
      • "store_const": 用来存储参数为 const 设置的值到 dest 指定的属性当中.常用于 dest 为同名2个以上选项时的处理. 不跟参数.
      • "append_const": 用来存储参数为 const 设置的数组到 dest 指定的属性当中. 不跟参数.
      • "count": 使用后将给储存值到 dest 指定的属性值加1,可以统计参数中出现次数.用途不大. 不跟参数.
      • "callback": 后面指定回调函数名(不加括号),会将相应opt和args传给回调函数.
      • "help", "version": 对应为帮助和版本. 要另外自己设计时使用.

    当 action 设置为 store_ture / store_false 时, 解析参数时, 如果有值时为 Ture / False, 没有值时为 None.
    当 dest 相同时, 一个 action 设置为 store_false, 另一个 action 设置为 store_ture 时, 解析参数时,以在后面出现的为准.

    参数详细.

    选项相关函数:

    • 可以用来同时设置多个选项的默认参数
        def set_default(self, dest, value):
    
        def set_defaults(self, **kwargs):
    
    • 检查是否有相应选项
        def has_option(self, opt_str):
    
    • 删除选项
        def remove_option(self, opt_str):
    

    eg.

    parser = OptionParser()
    parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')
    if parser.has_option('-f'):
        print('content -f')
        parser.set_default('-f', 'myFile')
        parser.remove_option('-f')
    
    if not parser.has_option('-f'):
        print('do not content -f')
    

    输出

    content -f
    do not content -f
    
    • 添加选项组 add_option_group()
      如果 options 很多的时候, 可以进行分组,然后进行添加. 分组的好处是, 对一系列程序参数可以分一个组,如果有独立的 description , 可以另外处理.使用如下:
    group = OptionGroup(parser)  #创建分组
    group.add_option() #添加选项
    parser.add_option_group(group) #将分组加入到解释器
    
    • 添加选项数组 add_options([Option1,…])
      将各个Option对象放在一个列表里再一起添加.

    参数解析 parse_args()

    使用 parse_args() 对参数进行解析,默认是使用 sys.argv[1:] 作为参数, 也可以传递一个命令行参数列表: parse_args(list).

    parse_args() 返回的两个值:

    • options,它是一个对象,保存有命令行参数值。只要知道命令行参数名,如 input,就可以访问其对应的值:options.input 。
    • args ,它是没被解析的命令行参数的列表。

    帮助文档

    默认自动带有 -h 和 --help 来输出帮助文档, 输出后程序终止.
    帮助文档由三部分组成:

    1. usage 帮助部分,
      usage 帮助部分一般在 OptionParser 初始化时输入,为第一个参数, 也可以用具体形参名指定. 可以使用 %prog 来表示当前的程序名.

    2. description 描述部分
      在初始化 OptionParser 时 description 形参指定的内容.

    3. 选项以及选项说明部分
      选项加入时定义的说明文字

    OptionParser 的形参 version 可以指定 --version 输出的字符串, 同样支持%prog, 如 version="%prog 1.0"

    # 一个帮助文档解释字符串
    hstr = '%prog custom help string'
    parser = OptionParser(hstr, description='custom description')
    

    get_usage(), get_description(), get_version(): 获得对应的字符串.
    print_help(), print_usage(), print_description(), print_version(): 输出相应内容
    error(str): 出错并输出str.

    引用
    Python分析命令行输入:OptParse模块

    相关文章

      网友评论

        本文标题:Python - OptParse 分析命令行输入模块

        本文链接:https://www.haomeiwen.com/subject/oyejfxtx.html