zoukankan      html  css  js  c++  java
  • 【译】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

     

    (未完待续)…………

  • 相关阅读:
    docker
    mitmproxy
    20145103《JAVA程序设计》课程总结
    20145103第五次实验报告
    20145103《JAVA程序设计》第十周学习总结
    《JAVA程序设计》第九周学习总结
    第四次实验报告
    第三次实验报告
    《java程序设计》第八周学习总结
    20145103 《Java程序设计》第7周学习总结
  • 原文地址:https://www.cnblogs.com/nettee/p/T_argparse_tutorial.html
Copyright © 2011-2022 走看看