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

            上一节我们讲解了add_argument()方法,这一节我们将学习parse_args()方法。
             parse_args()方法的作用是解析命令行参数,并返回解析之后的命名空间。默认的,参数从sys.argv中获取。
            1.参数值语法
            parse_args()支持多种语法来解析参数,最简单的方式如下,参数与值分开传递
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-x')
    >>> parser.add_argument('--foo')
    >>> parser.parse_args('-x X'.split())
    Namespace(foo=None, x='X')
    >>> parser.parse_args('--foo FOO'.split())
    Namespace(foo='FOO', x=None)
            对于比较长参数与值,可以使用=来传递
    >>> parser.parse_args('--foo=FOO'.split())
    Namespace(foo='FOO', x=None)
       对于简单的参数,参数与值可以连在一起
    >>> parser.parse_args('-xX'.split())
    Namespace(foo=None, x='X')
            几个简单的参数也可以连在一起,只使用一个-,只要最后的一个参数只需要一个值的情况下才成立。
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-x', action='store_true')
    >>> parser.add_argument('-y', action='store_true')
    >>> parser.add_argument('-z')
    >>> parser.parse_args('-xyzZ'.split())
    Namespace(x=True, y=True, z='Z')
        2.不合法的参数
        当传递不合法参数时,报错,并退出返回用法示例
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('--foo', type=int)
    >>> parser.add_argument('bar', nargs='?')
     
    >>> # invalid type
    >>> parser.parse_args(['--foo', 'spam'])
    usage: PROG [-h] [--foo FOO] [bar]
    PROG: error: argument --foo: invalid int value: 'spam'
     
    >>> # invalid option
    >>> parser.parse_args(['--bar'])
    usage: PROG [-h] [--foo FOO] [bar]
    PROG: error: no such option: --bar
     
    >>> # wrong number of arguments
    >>> parser.parse_args(['spam', 'badger'])
    usage: PROG [-h] [--foo FOO] [bar]
    PROG: error: extra arguments found: badger
            3.包含-的参数
            如果参数中含有-的话,很容易引起歧义。
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-x')
    >>> parser.add_argument('foo', nargs='?')
     
    >>> # no negative number options, so -1 is a positional argument
    >>> parser.parse_args(['-x', '-1'])
    Namespace(foo=None, x='-1')
     
    >>> # no negative number options, so -1 and -5 are positional arguments
    >>> parser.parse_args(['-x', '-1', '-5'])
    Namespace(foo='-5', x='-1')
     
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-1', dest='one')
    >>> parser.add_argument('foo', nargs='?')
     
    >>> # negative number options present, so -1 is an option
    >>> parser.parse_args(['-1', 'X'])
    Namespace(foo=None, one='X')
     
    >>> # negative number options present, so -2 is an option
    >>> parser.parse_args(['-2'])
    usage: PROG [-h] [-1 ONE] [foo]
    PROG: error: no such option: -2
     
    >>> # negative number options present, so both -1s are options
    >>> parser.parse_args(['-1', '-1'])
    usage: PROG [-h] [-1 ONE] [foo]
    PROG: error: argument -1: expected one argument
            如果你使用的位置参数之前必须带有-前缀,并且看起来也不像负数,此时可以插入--来告诉解析器后面的参数是位置参数。
    >>> parser.parse_args(['--', '-f'])
    Namespace(foo='-f', one=None)
       4.参数名缩写
       parse_args()方法允许比较长的参数进行缩写,只要不存在歧义。
    >>> parser = argparse.ArgumentParser(prog='PROG')
    >>> parser.add_argument('-bacon')
    >>> parser.add_argument('-badger')
    >>> parser.parse_args('-bac MMM'.split())
    Namespace(bacon='MMM', badger=None)
    >>> parser.parse_args('-bad WOOD'.split())
    Namespace(bacon=None, badger='WOOD')
    >>> parser.parse_args('-ba BA'.split())
    usage: PROG [-h] [-bacon BACON] [-badger BADGER]
    PROG: error: ambiguous option: -ba could match -badger, -bacon
            5.不使用sys.argv
            除了使用sys.argv传递参数外,还可以使用字符串列表来传递参数。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument(
    ... 'integers', metavar='int', type=int, choices=xrange(10),
    ... nargs='+', help='an integer in the range 0..9')
    >>> parser.add_argument(
    ... '--sum', dest='accumulate', action='store_const', const=sum,
    ... default=max, help='sum the integers (default: find the max)')
    >>> parser.parse_args(['1', '2', '3', '4'])
    Namespace(accumulate=<built-in function max>, integers=[1, 2, 3, 4])
    >>> parser.parse_args('1 2 3 4 --sum'.split())
    Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3, 4])
       6.自定义命名空间
       有时候不需要创建新的命名空间,可以直接传递一个命名空间。
    >>> class C(object):
    ... pass
    ...
    >>> c = C()
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo')
    >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c)
    >>> c.foo
    'BAR'
     
     

     


     
  • 相关阅读:
    web前端的发展态势
    AngularJs 简单入门
    css代码优化篇
    git提交报错:Please make sure you have the correct access rights and the repository exists.
    Activiti工作流框架学习
    遍历map集合的4种方法
    js设置日期、月份增加减少
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    webservice_rest接口_学习笔记
    相互匹配两个list集合+动态匹配${}参数
  • 原文地址:https://www.cnblogs.com/fireflow/p/4833926.html
Copyright © 2011-2022 走看看