Python命令行解析
2016-07-04 00:00
176 查看
sys.argv
手动解析
import sys for i in range(len(sys.argv)): print 'NO.%d: %s'%(i,sys.argv[i])
getopt
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)
python 分割参数getopt
argparse
optparse was deprecated since version 2.7 and will not be developed further; development will continue with the argparse module.argparse是python标准库中的模块,以前的optparse已经废弃。利用** argparse **,可以完成对命令行的参数定义、解析以及后续的处理。
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的显示格式,取值可以是如下三种,具体示例参见此处:
RawDescriptionHelpFormatter,
RawTextHelpFormatter
ArgumentDefaultsHelpFormatter
其它还有很多参数,此处就不一一列举了。
增加参数
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每个参数解释如下:
name or flags - 参数的名字.
action - 遇到参数时的动作,默认值是store。store_const,表示赋值为const;append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值; append_const,将参数规范中定义的一个值保存到一个列表;count,存储遇到的次数;此外,也可以继承argparse.Action自定义参数解析;
nargs - 参数的个数,可以是具体的数字,或者是?号,当不指定值时对于Positional argument使用default,对于Optional argument使用const;或者是*号,表示0或多个参数;或者是+号表示1或多个参数.
const - action和nargs所需要的常量值.
default - 不指定参数时的默认值.
type - 参数的类型.
choices - 参数允许的值.
required - 可选参数是否可以省略(仅针对optionals).
help - 参数的帮助信息,当指定为argparse.SUPPRESS时表示不显示该参数的帮助信息.
metavar - 在usage说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
一些示例:
# 参数名称为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")
如果必选参数的值以 - 开头,需要在输入命令时特殊处理:
->>> parser = argparse.ArgumentParser(prog='PROG')
->>> parser.add_argument('foo', nargs='?')
->>> parser.parse_args(['--', '-f'])
Namespace(foo='-f')
Sub-commands
将多个命令组合进一个程序中,使用子解析器来处理命令行的每个部分,就想SVN以及OpenStack各个组件那样:argparse 子命令解析1
argparse 子命令解析2
相关文章推荐
- Python执行系统命令
- Python程序员的10个常见错误
- python 爬虫抓取淘宝MM照片
- python去除list中的重复元素的最简单办法(但性能不一定好)
- 在CMD命令行中运行python脚本
- Python dict & set
- Python for &while 循环
- scikit-learn : GBR (Gradient boosting regression)
- Python条件判断
- Python list &tuple
- Python字符串格式化
- Python数据类型
- Python输入输出
- Python解释器
- install opencv with python2 in OSX - 在OSX安装基于python2的opencv
- scikit-learn : Logistic Regression
- Python 语言及其应用 Chapter_5_Note_2 包
- Python Web 5 —— 错误捕获和错误页
- python开发之路Day17-算法设计(冒泡排序、选择排序、插入排序、二叉树)
- Python 语言及其应用 Chapter_5_Note_1 模块