命令行处理

2017-09-25 0 By admin

命令行和参数解析
有两个相关的模块optparse和argparse。
argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库。

Optparse

optparse使用更具声明性的命令行解析风格:您创建一个实例 OptionParser,使用选项填充它,并解析命令行。
optparse允许用户以常规GNU / POSIX语法指定选项,并为您另外生成使用和帮助消息。

例子:
from optparse import OptionParser

parser = OptionParser()
parser.add_option(“-f”, “–file”, dest=”filename”,
help=”write report to FILE”, metavar=”FILE”)
parser.add_option(“-q”, “–quiet”,
action=”store_false”, dest=”verbose”, default=True,
help=”don’t print status messages to stdout”)

(options, args) = parser.parse_args()

argparse

实例化解析器
使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。

ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars=’-‘,fromfile_prefix_chars=None, argument_default=None,conflict_handler=’error’, add_help=True)

这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,会打印这些描述信息,一般只需要传递description参数。

定义参数
add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

1、name or flags:命令行参数名或者选项
选项前缀:prefix_chars
-为短参数
–为长参数
直接使用参数名的话,如果运行时没有这个参数,会报错。

2、action
argparse内置6种动作可以在解析到一个参数时进行触发:
store 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。
store_const 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。
store_ture/store_false 保存相应的布尔值。这两个动作被用于实现布尔开关。
append 将值保存到一个列表中。若参数重复出现,则保存多个值。
append_const 将一个定义在参数规格中的值保存到一个列表中。
version 打印关于程序的版本信息,然后退出

3、nargs
命令行参数的个数,一般使用通配符表示,其中,’?’表示只用一个,’*’表示0到多个,’+’表示至少一个

4、default
默认值

5、type
参数的类型,默认是字符串string类型,还有float、int等类型

6、help
和ArgumentParser方法中的参数作用相似,出现的场合也一致

例子:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity")
args = parser.parse_args()
if args.verbose:
print "verbosity turned on"