標籤:
OptionParser 可以方便地產生標準的、符合Unix/Posix 規範的命令列說明。
from optparse import OptionParserparser = OptionParser()parser.add_option(‘-p‘, ‘--pdbk‘, action = ‘store_true‘, dest = ‘pdcl‘, default = False, help = ‘write pdbk data to oracle db‘)parser.add_option(‘-z‘, ‘--zdbk‘, action = ‘store_true‘, dest = ‘zdcl‘, default = False, help = ‘write zdbk data to oracle db‘)(options, args) = parser.parse_args()if options.pdcl == True: print ‘pdcl is true.‘if options.zdcl == True: print ‘zdcl is True.‘
簡單流程
# 引入OptionParser類,建立OptionParser對象from optparse import OptionParserparser = OptionParser()# 定義命令列參數parser.add_option(opt_str, ..., attr = value, ...)# 解析命令列參數(options, args) = parser.parse_args()
可以在程式中手動傳遞一個命令列列表到parse_args(),否則預設使用 sys.argv[:-1]
parse_args()返回兩個值,options 儲存命令列參數值,args 是由 positional arguments 組成的列表
add_option() 用來加入選項,parse_args() 解析選項
樣本:
from optparse import OptionParserparser = OptionParser()parser.add_option(‘-f‘, ‘--file‘, dest = ‘filename‘, metavar = ‘FILE‘, help = ‘write report to FILE‘)parser.add_option(‘-q‘, ‘--quit‘, action = ‘store_false‘, dest = ‘verbose‘, default = True, help = ‘Don\‘t print status message to stdout.‘)(options, args) = parser.parse_args()
action 預設 store 表示將參數值儲存到 options 對象裡
樣本:
from optparse import OptionParserparser = OptionParser()parser.add_option(‘-f‘, ‘--file‘, action = ‘store‘, type = ‘string‘, dest = ‘filename‘)args = [‘-f‘, ‘foo.txt‘](options, args) = parser.parse_args(args)print options.filename
type 預設 ‘string‘,也可以是 ‘int‘ 或 ‘float‘ 等,長參數名可選,dest 未指定時將用命令列的參數名來存取 options 對象的值
store 其他兩種形式:store_true 和 store_false,還有 store_const、append、count、callback
樣本:
parser.add_option(‘-v‘, action = ‘store_true‘, dest = ‘verbose‘)parser.add_option(‘-q‘, action = ‘store_false‘, dest = ‘verbose‘)# 當解析到 ‘-v‘, options.verbose 為 True,解析到 ‘-q‘,options.verbose 為 False
default 設定參數預設值
樣本:
parser.add_option(‘-f‘, action = ‘store‘, dest = ‘filename‘, default = ‘foo.txt‘)parser.add_option(‘-v‘, action = ‘store_true‘, dest = ‘verbose‘, default = True)# 也可以使用 set_default()parser.set_defaults(filename = ‘foo.txt‘, verbose = True)parser.add_option(...)(options, args) = parser.parse_args()
help 產生協助資訊
樣本:
usage = ‘usage: %prog [options] arg1 arg2‘parser = OptionParser(usage = usage)parser.add_option(‘-v‘, ‘--verbose‘, action = ‘store_true‘, dest = ‘verbose‘, default = True, help = ‘make lots of noise [default]‘)parser.add_option(‘-q‘, ‘--quiet‘, action = ‘store_false‘, dest = ‘verbose‘, help = ‘be very quiet‘)parser.add_option(‘-f‘, ‘--filename‘, metavar = ‘FILE‘, help = ‘write output to FILE‘)parser.add_option(‘-m‘, ‘--mode‘, metavar=‘MODE‘, default = ‘intermediate‘, help = ‘interaction mode: novice, intermediate, or expert [default: %default]‘)
optparse 解析到 help 後不再解析其他命令列參數,usage 資訊會優先列印,預設 "usage: %prog [options]"
metavar 提醒使用者該參數期待的參數,如 metavar = ‘mode‘ 會在協助中顯示成 -m MODE, --mode=MODE
OptionGroup 參數分組
樣本:
group = OptionGroup(parser, ‘Dangerous Options‘, ‘Caution: use these options at your own risk. It is believed that some of them bite.‘)group.add_option(‘-g‘, action = ‘store_true‘, help = ‘Group option.‘)parser.add_option_group(group)
version 建立OptionParser對象時指定該參數,會解釋成 --version 命令列參數
optparser 可以自動探測並處理一些使用者異常,也可以使用 parser.error() 方法來自訂部分異常的處理
if options.a and options.b: parser.error(‘options -a and -b are mutually exclusive‘)
Python 的 OptionParser 模組