码迷,mamicode.com
首页 > 编程语言 > 详细

python命令行解析工具argparse模块【4】

时间:2015-09-24 00:48:38      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:

        上一节我们讲解了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

 

 
 

 


 

python命令行解析工具argparse模块【4】

标签:

原文地址:http://www.cnblogs.com/fireflow/p/4833926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!