文章标题

argparse是Python标准库中推荐的命令解析模块。本文主要针对3.x,3.x对比2.x在异常信息处理上有了一些提升和一些细节上有些不同。

注意:还有两个模块和argparse完成相同的功能,getopt(和C语言中的getopt()函数相同)和已经过时的optparse,但是argparse是基于optparse的,所以两者在用法上十分的相似。

概念:

让我们通过ls命令来介绍接下来将要讨论的argparse的设计目的:

$ ls
cpython  devguide  prog.py  pypy  rm-unused-function.patch
$ ls pypy
ctypes_configure  demo  dotviewer  include  lib_pypy  lib-python ...
$ ls -l
total 20
drwxr-xr-x 19 wena wena 4096 Feb 18 18:51 cpython
drwxr-xr-x  4 wena wena 4096 Feb  8 12:04 devguide
-rwxr-xr-x  1 wena wena  535 Feb 19 00:05 prog.py
drwxr-xr-x 14 wena wena 4096 Feb  7 00:59 pypy
-rw-r--r--  1 wena wena  741 Feb 18 01:01 rm-unused-function.patch
$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

从上面的四个命令中我们能获取到下面的概念:

1、在没有任何的选项的时候ls也是能正常工作的,它默认显示了当前目录下的所有文件

2、如果我们想知道更多的信息,则需要告诉它更多的信息。在这个例子中,我们想知道pypy目录下的文件信息,我们指定了一个确定的位置作为选择参数。pypy是一个程序知道的位置,所以程序知道接下来应该如何做,而且它的位置是十分重要的。这个概念在cp命令中有更好的体现:

cp SRC DEST
上面的例子中,第一个位置上的参数表示想要复制的内容,第二个参数的表示复制的目标位置。

基础:

让我们从一个非常简单的例子开始,虽然这个例子什么都做;

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
下面是这个例子的执行结果:

pythonprog.py python prog.py –help
usage: prog.py [-h]
optional arguments:
-h, –help show this help message and exit

$ python prog.py –verbose
usage: prog.py [-h]

$ python prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
运行过程中发生了:
1、运行中没有任何的参数选择,所以没有打印到标准输出。这种情况并不是很常见
2、第二个例子开始展示argparse模块的实用性,我们获取到了一些有用的帮助信息
3、–help也可以用简单的-h来代替,这是唯一一个我们不需要做特定的申明就可以使用的,如果指定其他参数就会报错。

引用位置参数:

一个栗子:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“echo”)
args = parser.parse_args()
print args.echo
然后运行下面的代码:

$ python prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo

$ python prog.py –help
usage: prog.py [-h] echo
positional arguments:
echo
optional arguments:
-h, –help show this help message and exit

$ python prog.py foo
foo
下面来聊运行过程中发生了什么:
1、我们使用了add_argument()函数,这个函数是用来告诉程序接受命令选项,在这个栗子中,我们把参数命名为echo来进行功能的实现。
2、现在我们的程序需要我们指定一个特定的选项
3、我们还注意到变量不需要特定的去指出将值存储在哪儿,而且foo字符串与echo自动进行了匹配。

然而值得注意的是,虽然help很有作用,但在当下的例子中却没有什么作用,在例子中我们获取了echo作为位置参数,但是我们如果不去看源码的话根本不知道这是干什么的,所以让我们来做一些更有用的东西:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“echo”, help=”echo the string you use here”)
args = parser.parse_args()
print args.echo
然后:

$ python prog.py -h
usage: prog.py [-h] echo

positional arguments:
echo echo the string you use here

optional arguments:
-h, –help show this help message and exit
然后让我们来做些更有用的:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“square”, help=”display a square of a given number”)
args = parser.parse_args()
print args.square**2
结果:

$ python prog.py 4
Traceback (most recent call last):
File “prog.py”, line 5, in
print args.square**2
TypeError: unsupported operand type(s) for ** or pow(): ‘str’ and ‘int’
事情进展的并不顺利,因为argparse默认将我们给出的参数设为一个字符串,除非我们告诉它实际的数据类型,所以我们需要进行设置:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“square”, help=”display a square of a given number”,
type=int)
args = parser.parse_args()
print args.square**2
结果如下:

pythonprog.py416 python prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: ‘four’
这下没问题了,但是我们的程序还是处理不了参数异常的情况

引用选择参数

目前为止,我们已经了解了位置参数的引用,接下来让我们来看看如何添加选择参数:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“–verbosity”, help=”increase output verbosity”) #已-或–开头
args = parser.parse_args()
if args.verbosity:
print “verbosity turned on”
输出为:

pythonprog.pyverbosity1verbosityturnedon python prog.py
$ python prog.py –help
usage: prog.py [-h] [–verbosity VERBOSITY]

optional arguments:
-h, –help show this help message and exit
–verbosity VERBOSITY
increase output verbosity
$ python prog.py –verbosity
usage: prog.py [-h] [–verbosity VERBOSITY]
prog.py: error: argument –verbosity: expected one argument
下面是程序运行产生的结果:
1、当我们在命令行中列出了–verbosity时,程序才会给我们显示所需要的信息,而如果我们不列出–verbosity则什么都不会显示。
2、显示这个选项是可选择的,即使我们不添加也不会有任何的错误,注意,默认的时候argparse.verbosity是不会赋任何值的,所以上面的程序中if语句出现了错误
3、help语句有一些不一样
4、当使用–verbosity时,我们必须给它一个值,任何一个值

–verbosity能接受任意的整数值,但是为了简化程序,我们希望只有true和false两个bool型的变量能够被使用,让我们相应修改我们的程序:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“–verbose”, help=”increase output verbosity”,
action=”store_true”)
args = parser.parse_args()
if args.verbose:
print “verbosity turned on”
输出:

pythonprog.pyverboseverbosityturnedon python prog.py –verbose 1
usage: prog.py [-h] [–verbose]
prog.py: error: unrecognized arguments: 1
$ python prog.py –help
usage: prog.py [-h] [–verbose]

optional arguments:
-h, –help show this help message and exit
–verbose increase output verbosity
分析:
1、比起之前需要一个Value,现在的做法更像一个标志选项,我们甚至为了实现这中想法修改了选项参数,我们添加了一个新的关键字“action”,并赋值给他一个默认的“store_true”,表示,如果这个选项被列出来就表示为true,若没有则为false。
2、当再给选项一个特定的值时反而会报错,因为选项本身代表了true
3、注意帮助选项的不同。

缩略选项

如果你对命令行比较熟悉的话,你会注意到我们还没有提及到缩略选项,它其实要求很简单:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“-v”, “–verbose”, help=”increase output verbosity”,
action=”store_true”)
args = parser.parse_args()
if args.verbose:
print “verbosity turned on”
结果:

pythonprog.pyvverbosityturnedon python prog.py –help
usage: prog.py [-h] [-v]

optional arguments:
-h, –help show this help message and exit
-v, –verbose increase output verbosity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值