11 python命令行选项使用
1 OptionParser模块 2 3 -------------- 代码说明 ----------------------------------------- 4 简单流程 5 1,首先,必须 import OptionParser 类,创建一个 OptionParser 对象: 6 7 from optparse import OptionParser 8 parser = OptionParser() 9 10 11 2,add_option() 方法来, 来定义命令行参数: 12 parser.add_option("-f", "--file", ...) 13 说明: 14 2.1 -f 或者 –file 分别是长短参数名: 15 2.2 Actions 参数: 16 它指示 optparse 当解析到一个命令行参数时该如何处理。 17 18 例如: 19 parser.add_option("-f", "--file", action="store", type="string", dest="filename") 20 ## 执行脚本时 -f "1.txt" 21 则会将 "1.txt" 字符串保存在变量filename中, 22 ## 执行本时,如果没有-f 23 则filename的值为None 或者默认值 24 25 26 #action 参数取值:“store” (默认), “tore_true” 和 “store_false” 27 ##(store_true 和 store_false ,用于处理带命令行参数后面不 带值的情况。) 28 ## 即后面带不带参数是根据此项来配置的, 29 30 例如: 31 parser.add_option("-v", action="store_true", dest="verbose") 32 parser.add_option("-q", action="store_false", dest="verbose") 33 34 #当解析到 ‘-v’,options.verbose 将被赋予 True 值,反之,解析到 ‘-q’,会被赋予 False 值, 35 ##如果没有使用选项“-v”或者'-q' 则存储变量的值为none 36 如果执行脚本时带了选项,则verbose变量值为,为“tore_true” 和 “store_false” 中的Ture或False 否则 就为默认值 或者 None 37 38 39 例如: 40 41 parser.add_option( 42 "-f", "--file", # 操作指令 43 action="store", ## 表明选项后面是要有值的 44 dest="filename", # 存储的变量 45 type="string", # 变量类型(一般默认的也是此类型的) 46 default='AAAA', 47 help="write report to FILE", # 显示的帮助信息 48 metavar="FILE" # 存储变量的值 49 ) 50 51 52 (options, args) = parser.parse_args() 53 54 55 if options.filename is True: 56 print 'filename is true' 57 if options.filename is False: 58 print 'filename is False' 59 60 61 62 63 64 2.3 type参数 65 type 参数取值:“string” (默认), "int" "float"... 66 67 68 2.4 dest参数 69 dest 参数取值,即选项 取值将要保存在哪个变量中,(即变量名) #如果没有指定 dest 参数,将用命令行的参数名来对 options 对象的值进行存取。 70 71 72 2.5 default 参数 73 即 选项的的默认取值 74 功能:用于设置默认值。 75 例如: 76 parser.add_option("-f","--file", action="store", dest="filename", default="foo.txt") 77 parser.add_option("-v", action="store_true", dest="verbose", default=True) 78 79 80 81 3,调用 parse_args() 来解析程序的命令行: 82 (options, args) = parser.parse_args() 83 84 说明; 85 parse_args() 返回的两个值: 86 options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如 file,就可以访问其对应的值: options.file 。 87 args,它是一个由 positional arguments 组成的列表。 88 89 90 4, add_option() 方法中的-h 选项 91 功能: 92 自动生成程序的帮助信息 ## 当 optparse 解析到 -h 或者 –help 命令行参数时,会调用 parser.print_help() 打印程序的帮助信息: 93 94 例如: 95 usage = "usage: %prog [options] arg1 arg2" 96 parser = OptionParser(usage=usage) 97 parser.add_option("-v", "--verbose", 98 action="store_true", dest="verbose", default=True, 99 help="make lots of noise [default]") 100 parser.add_option("-q", "--quiet", 101 action="store_false", dest="verbose", 102 help="be vewwy quiet (I'm hunting wabbits)") 103 parser.add_option("-f", "--filename", 104 metavar="FILE", help="write output to FILE"), 105 parser.add_option("-m", "--mode", 106 default="intermediate", 107 help="interaction mode: novice, intermediate, " 108 "or expert [default: %default]") 109 110 111 ############################################################################### 112 113 114 115 ############################################### 116 实战用例 117 118 ##导入模块 119 from optparse import OptionParser 120 ##创建实例对象 121 parser = OptionParser() 122 123 124 ##添加选项 125 parser.add_option( 126 "-p", "--pdbk", ## -f 或者 –file 分别是长短参数名 127 action="store", # 指示 optparse 当解析到一个命令行参数时该如何处理 128 dest="pdcl", # 存储的变量 129 default=False, 130 help="write pdbk data to oracle db" 131 ) 132 133 ##添加选项 134 parser.add_option( 135 "-z", "--zdbk", 136 action="store_true", 137 dest="zdcl", # 存储的变量 138 default=False, 139 help="write zdbk data to oracle db" 140 ) 141 142 ##添加选项 143 parser.add_option( 144 "-f", "--file", # 操作指令 145 action="store", 146 dest="filename", # 存储的变量 147 type="string", # 变量类型 默认地,type 为'string' 148 help="write report to FILE", # 显示的帮助信息 149 metavar="FILE" # 存储变量的值 150 ) 151 152 #添加选项 153 parser.add_option( 154 "-q", "--quiet", 155 action="store_false", 156 dest="verbose", 157 default=True, 158 help="don't print status messages to stdout" 159 ) 160 161 ##解析选项 162 (options, args) = parser.parse_args() 163 164 ##使用选项变量 165 if options.pdcl is True: 166 print 'pdcl is true' 167 print("pdcl={0}".format(options.pdcl)) 168 if options.zdcl is True: 169 print 'zdcl is true' 170 if options.filename is not None: 171 print("filename={0}".format(options.filename)) 172 173 print(args) 174 175 通过对上面三种参数解析策略的说明,可以看到这里使用OptionParser模块进行解析是最佳方式。 176 177 ########## 另种方法 ##################################################################### 178 getopt模块 179 getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。 180 命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。 181 182 183 该模块提供了两个方法及一个异常处理来解析命令行参数。 184 getopt.getopt 185 方法用于解析命令行参数列表, 186 语法格式如下: 187 getopt.getopt(args, options[, long_options]) 188 189 方法参数说明: 190 args: 要解析的命令行参数列表。 191 options: 以列表的格式定义,options后的冒号(:)表示该选项必须有附加的参数,不带冒号表示该选项不附加参数。 192 long_options: 以字符串的格式定义,long_options 后的等号(=)表示如果设置该选项,必须有附加的参数,否则就不附加参数。 193 该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有'-'或'--'的参数。