【译】Python标准库 argparse(命令行参数解析)Tutorial

本文翻译自Python官方documentation, Python 版本 3.3

原文链接:http://docs.python.org/3/howto/argparse.html#id1

 

----------------------------------------------------------------------------------------

 

这份教程是对 argparse 的简要介绍,argparse 是 Python 标准库中推荐使用的命令行解析模块.

注意:与 argparse 完成相同任务的模块还有 getopt(与 C语言中的 getopt() 函数用法相同)和已经被废弃的 optparse.另外 argparse 是以 optparse 为基础的,因此二者在用法方面很相似.

 

概念

 

让我们通过使用 ls 命令来展示在入门指引中我们将要探讨的命令行解析功能:

$ 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. 如果想实现默认以外的功能,就要多给 ls 一个参数.在第二条命令中,我们想让它打印出 pypy 目录下的内容,这时就要指明"位置参数".程序对命令行参数的处理取决于参数在命令行上出现的位置.这个概念在 cp 命令的使用中体现得更明显,cp 的基本用法是 cp SRC DEST.第一个参数是你要复制的东西,第二个参数是要复制到的目标位置.

3. 如果我们想要改变程序的行为.在第三条命令中,我们让 ls 打印出每个文件的详细信息,而不仅是文件名.这时的 -l 就是"可选参数".

4. 第四条命令是让显示一段帮助信息.在你从来没有用过一个命令的时候,这是非常有用的,我们简单地通过查看帮助文字就可以明白一个命令是怎样工作的.

 

基础

 

让我们从一个非常简单的例子开始,下面这段代码几乎什么都不做:

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

程序的运行结果如下:

$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
  -h, --help  show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo

解释一下每次程序都做了什么:

1. 不加任何选项就运行,结果什么都没有打印到标准输出.这没啥意思.

2. 第二条命令已经开始体现出 argparse 模块的优势了:即使我们什么都没做,argparse 也能自动显示出漂亮的帮助信息.

3. --help 选项(或缩写 -h),是唯一被自动添加的选项.在命令中给出任何其他的选项都会导致错误.

 

位置参数介绍

 

一个例子:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

运行结果:

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

positional arguments:
  echo

optional arguments:
  -h, --help  show this help message and exit
$ python3 prog.py foo
foo

解释一下程序做了什么:

1. add_argument()方法用来添加我们想要的选项.在例子中,我们添加了一个叫 echo 的选项.

2. 现在运行程序必须指定一个参数

3. parse_args() 方法返回一些参数中指明的数据,比如例子中的 echo.

4. args.echo 是一个"有魔力"的变量,即我们不需要指定在 echo 参数位置上的值用什么变量来存储,argparse 自动创建一个和参数名相同名字的变量,作为 parse_args()返回值的方法.

注意到,虽然帮助信息看起来漂亮齐全,但其实它并不够有用.我们通过帮助可以知道有一个叫 echo 的位置参数,但不能从帮助信息中得知它的作用.下面做一点小的改动:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)
$ python3 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

 

(未完待续)…………

原文地址:https://www.cnblogs.com/nettee/p/T_argparse_tutorial.html