Python 中的命令行参数处理 -- argparse、optparse、getopt

argparse、optparse、getopt 三个模块都可以对命令行中的参数处理,但 optparse 模块已被 Python3.2、Python2.7 弃用;getopt 模块的API是来自C语言中的  getopt() 函数;argparse 模块是基于 optparse 的,使用方法相似,从 sys.argv 中解析参数,可编写用户友好的命令行界面,自动生成帮助和使用信息,对于无效参数可产生相应的错误提示。因此本文主要介绍 argparse 模块的相关用法。

 

官方样例

prog.py

  1 import argparse
  2 parser = argparse.ArgumentParser(description='Process some integers.')
  3 parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
  4 parser.add_argument('-s', '--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)')
  5 args = parser.parse_args()
  6 print(args.accumulate(args.integers))

上述代码接收命令行中的所有整数,默认输出最大整数。通过可选参数 '-s' 或 '--sum',输出所有整数和。非整数输入会输出相应的错误提示。

Python 中的命令行参数处理 -- argparse、optparse、getopt_第1张图片

 

创建解析器

  1 import argparse
  2 parser = argparse.ArgumentParser(description='Process some integers.')

通过上述方法创建了一个 ArgumentParser 实例对象,其中 description 参数是对该对象的描述。更多参数详见 官方文档 。

 

添加参数

  1 parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the  accumulator')
  2 parser.add_argument('-s', '--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)')

通过 add_argument() 方法来添加参数,一共有两种参数。一种为位置参数,如:'integers';一种为可选参数,如:短参数 '-s' 或长参数 '--sum' 。由 argparse创建的解析器自带可选参数 '-h' 或 '--help',生成相应的帮助和使用信息。

该方法中的参数描述如下:

  • metavar:指定帮助信息中的参数名称。本例指定 'N' 为 'integers' 在帮助信息中的名称。
  • type:指定命令行中的参数类型。常见有 int、str、float 等。
  • nargs:指定命令行中的参数数量。一般通过整数指定个数,本例中的 '+' 表示接受所有参数到一个列表中。
  • dest:指定解析器的属性名。本例中的可选参数可通过 args.accumulate 来访问。
  • const:指定常量值或一些动作。本例指定求和动作 sum 。
  • action:指定参数操作。本例中的'store_const'操作为使用存储 const 关键字参数指定的值 sum 。更多动作详见 官方文档 。
  • default:指定参数的默认值或一些动作。本例指定求最大值动作 max 。
  • help:描述参数信息。

 

解析参数

  1 args = parser.parse_args()

通过 parse_args() 方法默认接受 sys.argv 的参数,返回可获取属性的 namespace 对象。除此之外,还可通过 vars(args) 方法将该对象字典化,通过字典的方式访问属性。

 

总结

argparse 模块通过创建解析器,添加参数,解析参数三步完成对命令行参数的处理。

转载于:https://www.cnblogs.com/sherlockChen/p/8245512.html

你可能感兴趣的:(Python 中的命令行参数处理 -- argparse、optparse、getopt)