python argsparse_python中的argparse

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。

最基础的,从一个最简单的程序开始:

1 import argparse2 parser = argparse.ArgumentParser()

运行结果:

1 $ python 1.py2 $

定位参数:

1 importargparse2 parser=argparse.ArgumentParser()3

4

5 parser.add_argument("echo")6 parser.add_argument("hello")7

8 args =parser.parse_args()9

10 print args.ehco

运行:

1 $python 1.py2 usage: 1.py [-h] echohello3 1.py: error: too few arguments4

5 $python 1.py echo

6 usage: 1.py [-h] echohello7 1.py: error: too few arguments8

9

10 $python 1.py echohello11 echo

方法add_argument(),用来指定程序需要接受的命令参数;

并且argparse是默认字符串,如果以数字形式输入会报错,如下面代码所示:

1 importargparse2 parser=argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use here")4 args=parser.parse_args()5 print args.echo*10

运行:

$ python 1.py 4Traceback (most recent calllast):

File"1.py", line 5, in print args.square**2TypeError: unsupported operand type(s)for ** or pow(): 'str' and 'int'

必须将代码增加type=你需要的类型(像这里需要int类型):

1 importargparse2 parser=argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use here", type=int)4 args=parser.parse_args()5 print args.echo*10

--help:

虽然现在帮助信息已经很美观了,但是还不够好。例如我们知道echo是个定位参数,但是却不知道该参数的意思,只能通过猜或者读源码。下面,我们可以让它更有帮助:

1 importargparse2 parser =argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use there")4 args =parser.parser_args()5 print args.echo

运行:

1 $ python 1.py -h2 usage: 1.py [-h] echo3

4 positional arguments:5 echo echo the string you use here6

7 optional arguments:8 -h, --help show this help message and exit

参考类型:

一般来说,如果不指定参数类型的话,argparse默认为字符串类型,可以通过type来指定;

1 importargparse2 parser =argparse.ArgumentParser()3 parser.add_argument("square", help="display a square of a given number", type=int)4 args =parser.parse_args()5 print args.square**2

还可以使用default=xx来指定默认参数的值,例如:

1 parser.add_argument("echo", action="count", default=0)

可选参数:

1 importargparse2 parser =argparse.ArgumentParser()3 parser.add_argument("--verbosity", help="increase output verbosity")4 args =parser.parse_args()5 ifargs.verbosity:6 print "verbosity turned on"

运行:

$ python 1.py --verbosity 1verbosity turned on

$ python1.py

$ python1.py --help

usage: prog.py [-h] [--verbosity VERBOSITY]

关于可选参数还有一个简写:

1 importargparse2 parser =argparse.ArgumentParser()3 parser.add_argument("-vwww", "--verbose", help="increase output verbosity", action="store_true")4 args =parser.parse_args()5 ifargs.verbose:6 print "verbosity turned on"

这里的-vww就是其简写,action: store_true / store_false:布尔开关。 store_true.默认为False,输入则为true。 store_flase 相反;

1 $ python prog.py -v2 verbosity turned on3 $ python prog.py --help4 usage: prog.py [-h] [-v]5

6 optional arguments:7 -h, --help show this help message and exit8 -v, --verbose increase output verbosity

在命令行中只要-v和-vwww前面一致就行,如果是-vp就会报错;如果是-vw,默认是-vwww,也个23是正确的;

注意:

1 parser.add_argument("-v", "--verbose", action="store_true",help="increase output verbosity")

这些是没有顺序的,当然也可以像上面一样了;

参数冲突:

迄今为止,我们已经使用到了[argparse.ArgumentParser][6]的两个方法,来看看他的另一个方法add_mutually_exclusive_group()。它可以让我们指定某个参数和其他参数冲突。下面来修改下程序以对这个新方法有更多的了解:我们将加入参数--quiet,它和参数--verbose冲突,不能同时指定:

1 importargparse2 parser =argparse.ArgumentParser()3 parser.add_argument("-v", "--verbose", type=int, help="the base")4 parser.add_argument("-q", "--quiet", type=int, help="the exponent")5

6 args =parser.parse_args()7 ifargs.quiet:8 print "111111"

9 elifargs.verbose:10 print "222222"

运行:

1 $python 1.py -v -q2 $11111

另一个方法add_mutually_exclusive_group():

1 importargparse2

3 parser =argparse.ArgumentParser()4 group =parser.add_mutually_exclusive_group()5 group.add_argument("-v", "--verbose", action="store_true")6 group.add_argument("-q", "--quiet", action="store_true")7 ifargs.quiet:

8     print "111111"

9 elifargs.verbose:

10     print "222222"

运行:

1 python 1.py -v -q2 usage: 1.py [-h] [-v | -q]3 test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

表明了可以使用-v或者-q,但是不能同时使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值