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'
     
     

     


     
  • 相关阅读:
    A1126 Eulerian Path (25分)
    A1125 Chain the Ropes (25分)
    A1124 Raffle for Weibo Followers (20分)
    A1123 Is It a Complete AVL Tree (30分)
    A1122 Hamiltonian Cycle (25分)
    A1121 Damn Single (25分)
    A1120 Friend Numbers (20分)
    A1119 Pre- and Post-order Traversals (30分)
    总的调试开关
    sourceInsight
  • 原文地址:https://www.cnblogs.com/fireflow/p/4833926.html
Copyright © 2011-2022 走看看