手动解析
import sys for i in range(len(sys.argv)): print 'NO.%d: %s'%(i,sys.argv[i])
getopt模块原来是命令行选项的解析器,支持UNIX函数getopt()创建的约定。它会解析一个参数序列,如sys.argv,并返回一个元祖序列和一个非选项参数序列。目前支持的选项语法包括短格式和长格式选项:- ,--。
try: options, remainder = getopt.getopt(sys.argv[1:], 'o:v', ['output=', 'verbose', 'version=',]) except getopt.GetoptError as err: print 'ERROR:', err sys.exit(1)
optparse was deprecated since version 2.7 and will not be developed further; development will continue with the argparse module.python
argparse是python标准库中的模块,之前的optparse已经废弃。利用** argparse **,能够完成对命令行的参数定义、解析以及后续的处理。app
import argparse parser = argparse.ArgumentParser(description="some information here") args = parser.parse_args()
ArgumentParser函数有不少可选参数,prog、usage、description、epilog分别定义解析器的_名称、使用说明、描述、最后的结尾描述_。使用parents表示共享同一个父类解析器(这样就能够共享父类解析器的参数),而这个父类解析器一般是以下定义:函数
parent_parser = argparse.ArgumentParser(add_help=False)
此外,formatter_class定义description的显示格式,取值能够是以下三种,具体示例参见此处:ui
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每一个参数解释以下:spa
一些示例:.net
# 参数名称为echo parser.add_argument("echo", help="echo the string you use here") # 能够增长类型 parser.add_argument("square", help="display a square of a given number", type=int) # 可选参数前面多了--符号,-v是简写形式,store_true说明碰到该参数时保存为true,不然就是false parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") # 固然,也能够这样写,规定了可选参数的类型和取值范围 parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity") # count表示遇到该参数几回,值就加几,默认值是0 parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
增长互斥类型的参数:命令行
group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true")
若是必选参数的值以 - 开头,须要在输入命令时特殊处理:code
->>> parser = argparse.ArgumentParser(prog='PROG') ->>> parser.add_argument('foo', nargs='?') ->>> parser.parse_args(['--', '-f']) Namespace(foo='-f')orm
将多个命令组合进一个程序中,使用子解析器来处理命令行的每一个部分,就想SVN以及OpenStack各个组件那样: argparse 子命令解析1 argparse 子命令解析2