zoukankan      html  css  js  c++  java
  • python命令行解析工具argparse模块【2】

          上一节,我们简要的介绍了argparse的用法,接下来几节,将详细讲解其中的参数及用法,这一节我们讲解ArgumentParser对象。

          argparse.ArgumentParser([description][, epilog][, prog][, usage][, add_help][, argument_default][, parents][, prefix_chars][,conflict_handler][, formatter_class])

          创建一个ArgumentParser对象。每个参数都有其特殊含义,简单的介绍如下:

      • description:help参数之前显示的信息

      • epilog:help参数之后显示的信息。

      • add_help:给解析器添加-h/--help选项(默认为True)

      • argument_default:设置参数的默认值(默认为None)

      • parents:ArgumentParser对象组成列表,这些对象中的参数也要包含进来。

      • prefix_chars:可选参数之前的前缀(默认为-)

      • fromfile_prefix_chars:如果是从文件中读取参数,这个文件名参数的前缀(默认为None)

      • formatter_class:一个自定义帮助信息格式化输出的类

      • conflict_handler:通常不需要,定义了处理冲突选项的策略

      • prog:程序名(默认为sys.argv[0])

      • usage:程序的使用用例,默认情况下会自动生成。

          1.description

          大多数调用ArgumentParser构造函数的例子中都会使用description参数,这个参数会简短的描述这个程序的用途。

    >>> parser = argparse.ArgumentParser(description='A foo that bars')
    >>> parser.print_help()
    usage: argparse.py [-h]
    
    A foo that bars
    
    optional arguments:
     -h, --help  show this help message and exit
       默认情况下,这个描述信息前后都会有一个空行,如果想改变这种显示,可以使用formatter_class参数

          2.epilog

          有些程序可能想在描述信息之后再继续展示别的信息,这个时候可以使用epilog参数设置。

    >>> parser = argparse.ArgumentParser(
    ...     description='A foo that bars',
    ...     epilog="And that's how you'd foo a bar")
    >>> parser.print_help()
    usage: argparse.py [-h]
    
    A foo that bars
    
    optional arguments:
     -h, --help  show this help message and exit
    
    And that's how you'd foo a bar

          跟description参数一样,这个信心前后都有一个空行,同样可以通过formatter-class参数设置。

          3.add_help

          默认情况下,ArgumentParser对象对自动添加-h/--help选项,以展示帮助信息。例如,myprogam.py代码如下所示:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', help='foo help')
    args = parser.parse_args()

          如果命令行支持-h/--help参数,则下面的代码输出如下:

    $ python myprogram.py --help
    usage: myprogram.py [-h] [--foo FOO]
    
    optional arguments:
     -h, --help  show this help message and exit
     --foo FOO   foo help

          通过设置add_help=False可以取消帮助信息的显示

    >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
    >>> parser.add_argument('--foo', help='foo help')
    >>> parser.print_help()
    usage: PROG [--foo FOO]
    
    optional arguments:
     --foo FOO  foo help

          4.prefix_chars

          大多数命令行参数使用-作为前缀,但是可以使用prefix_char=argument来自定义前缀。

    >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
    >>> parser.add_argument('+f')
    >>> parser.add_argument('++bar')
    >>> parser.parse_args('+f X ++bar Y'.split())
    Namespace(bar='Y', f='X')

          5.fromfile_prefix_chars

          有时候需要从文件中获取参数,如果参数过多的话。这时,如果设置了fromfile_prefix_chars参数的话,解析器会将带有这个设定前缀的参数作为文件处理。

    >>> with open('args.txt', 'w') as fp:
    ...    fp.write('-f
    bar')
    >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
    >>> parser.add_argument('-f')
    >>> parser.parse_args(['-f', 'foo', '@args.txt'])
    Namespace(f='bar')

          文件中必须是每行对应一个参数。

          6.argument_default

          设置参数的默认值。

    >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
    >>> parser.add_argument('--foo')
    >>> parser.add_argument('bar', nargs='?')
    >>> parser.parse_args(['--foo', '1', 'BAR'])
    Namespace(bar='BAR', foo='1')
    >>> parser.parse_args([])
    Namespace()

          7.parents

          有时候,几个解析器共享一个参数集合,可以将这个共享参数集合传递给parent,解析器对象会将这些共享参数包含在内。

    >>> parent_parser = argparse.ArgumentParser(add_help=False)
    >>> parent_parser.add_argument('--parent', type=int)
    
    >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser])
    >>> foo_parser.add_argument('foo')
    >>> foo_parser.parse_args(['--parent', '2', 'XXX'])
    Namespace(foo='XXX', parent=2)
    
    >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser])
    >>> bar_parser.add_argument('--bar')
    >>> bar_parser.parse_args(['--bar', 'YYY'])
    Namespace(bar='YYY', parent=None)

          注意大多数情况下,父解析器会将add_help设置为False,否则将会出现两个-h/--help选项,从而导致错误。

          8.formatter_class

          通过指定formatter_class可以对帮助信息进行格式化输出。这样的类有三个:argparse.RawDescriptionHelpFormatter, argparse.RawTextHelpFormatter 以及argparse.ArgumentDefaultsHelp

          默认情况下,description以及epilog信息前后都有一个空行。

    >>> parser = argparse.ArgumentParser(
    ...     prog='PROG',
    ...     description='''this description
    ...         was indented weird
    ...             but that is okay''',
    ...     epilog='''
    ...             likewise for this epilog whose whitespace will
    ...         be cleaned up and whose words will be wrapped
    ...         across a couple lines''')
    >>> parser.print_help()
    usage: PROG [-h]
    
    this description was indented weird but that is okay
    
    optional arguments:
     -h, --help  show this help message and exit
    
    likewise for this epilog whose whitespace will be cleaned up and whose words
    will be wrapped across a couple lines

          如果将formatter_class参数设置为argparse.RawDescriptionHelpFormatter,则description和epilog将会按原样输出。

    >>> parser = argparse.ArgumentParser(
    ...     prog='PROG',
    ...     formatter_class=argparse.RawDescriptionHelpFormatter,
    ...     description=textwrap.dedent('''
    ...         Please do not mess up this text!
    ...         --------------------------------
    ...             I have indented it
    ...             exactly the way
    ...             I want it
    ...         '''))
    >>> parser.print_help()
    usage: PROG [-h]
    
    Please do not mess up this text!
    --------------------------------
       I have indented it
       exactly the way
       I want it
    
    optional arguments:
     -h, --help  show this help message and exit

          RawTextHelpFormatter则会保留预定义的帮助信息中的空格。

          另外一个类ArgumentDefaultsHelpFormatter则会给所有的有默认值的参数添加默认值信息。

    >>> parser = argparse.ArgumentParser(
    ...     prog='PROG',
    ...     formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    >>> parser.add_argument('--foo', type=int, default=42, help='FOO!')
    >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
    >>> parser.print_help()
    usage: PROG [-h] [--foo FOO] [bar [bar ...]]
    
    positional arguments:
     bar         BAR! (default: [1, 2, 3])
    
    optional arguments:
     -h, --help  show this help message and exit
     --foo FOO   FOO! (default: 42)

          9.conflict_handler

          ArgumentParser对象不允许传入两个相同的参数,否则会报错。

    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-f', '--foo', help='old foo help')
    >>> parser.add_argument('--foo', help='new foo help')
    Traceback (most recent call last):
     ..
    ArgumentError: argument --foo: conflicting option string(s): --foo

          通过设置conflict_handler为resolve,可以用新的参数覆盖旧的同名参数。    

    >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve')
    >>> parser.add_argument('-f', '--foo', help='old foo help')
    >>> parser.add_argument('--foo', help='new foo help')
    >>> parser.print_help()
    usage: PROG [-h] [-f FOO] [--foo FOO]
    
    optional arguments:
     -h, --help  show this help message and exit
     -f FOO      old foo help
     --foo FOO   new foo help

          10.prog

          默认情况下,ArgumentParser对象使用sys.argv[0]来获取程序名。大多数情况下下,默认值就足够了,例如:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', help='foo help')
    args = parser.parse_args()
        这种情况,帮助信息会如下所示:
    
    
    $ python myprogram.py --help
    usage: myprogram.py [-h] [--foo FOO]
    
    optional arguments:
     -h, --help  show this help message and exit
     --foo FOO   foo help
    $ cd ..
    $ python subdirmyprogram.py --help
    usage: myprogram.py [-h] [--foo FOO]
    
    optional arguments:
     -h, --help  show this help message and exit
     --foo FOO   foo help

          如果想改变这个默认值,可以设置prog。

    >>> parser = argparse.ArgumentParser(prog='myprogram')
    >>> parser.print_help()
    usage: myprogram [-h]
    
    optional arguments:
     -h, --help  show this help message and exit

          11.usage

          默认情况下,ArgumentParser对象会自动计算出程勋的用法示例  

    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('--foo', nargs='?', help='foo help')
    >>> parser.add_argument('bar', nargs='+', help='bar help')
    >>> parser.print_help()
    usage: PROG [-h] [--foo [FOO]] bar [bar ...]
    
    positional arguments:
     bar          bar help
    
    optional arguments:
     -h, --help   show this help message and exit
     --foo [FOO]  foo help

        这个默认的信息可以通过设置usage来覆盖。

    >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')
    >>> parser.add_argument('--foo', nargs='?', help='foo help')
    >>> parser.add_argument('bar', nargs='+', help='bar help')
    >>> parser.print_help()
    usage: PROG [options]
    
    positional arguments:
     bar          bar help
    
    optional arguments:
     -h, --help   show this help message and exit
     --foo [FOO]  foo help
     
     
    
    
        
     
     
        
     
     

     

     

     

     
        
     
        
     
        
        
     
     
        
        
     
        
        
        
  • 相关阅读:
    不怕上不了 Android developers
    不花钱的可靠性设计
    linux2.6 内核特性配置
    Linux动态库的编译与使用 转载
    多线程使用互斥锁的C范例
    TSLIB 分析
    Notepad++中文版下载 以及HEX显示
    C程序实现在lcd 上全屏写 blue 色 及获取fb信息
    pthread_cond_wait的spurious wakeup问题
    查看linux内存条数的命令与清理内存使用
  • 原文地址:https://www.cnblogs.com/fireflow/p/4827005.html
Copyright © 2011-2022 走看看