Argparse 模块

本文介绍了Python标准库中的argparse模块,用于命令行选项、参数和子命令的解析。主要内容包括概念解释、基本使用、引用位置参数、引用选择参数和缩略选项的运用。示例展示了如何定义参数、处理不同类型的输入以及设置帮助信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

下面是这个例子的执行结果:

$ python prog.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 <module>
    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

结果如下:

$ python prog.py 4
16
$ 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"

输出为:

$ python prog.py --verbosity 1
verbosity turned on
$ 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"

输出:

$ python prog.py --verbose
verbosity turned on
$ 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"

结果:

$ python prog.py -v
verbosity turned on
$ 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、付费专栏及课程。

余额充值