Python命令行选项参数解析策略
概述
在Python的項目開發過程中,我們有時需要為程序提供一些可以通過命令行進行調用的接口。不過,并不是直接使用 command + 當前文件 就ok的,我們需要對其設置可選的各種各樣的操作類型。所以,這種情況下我們就有必要對傳入的參數進行解析操作。下面就此問題提出幾種不同的解決策略,希望于你有益。
版權說明
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:Q-WHai
發表日期: 2016年3月18日
鏈接:http://blog.csdn.net/lemon_tree12138/article/details/50912898
來源:CSDN
更多內容:分類 >> Thinking In Python
目錄
文章目錄
- 概述
- 版權說明
- 目錄
- @[toc]
- 樸素字符串匹配方案
- 分析
- 優點
- 缺點
- getopt模塊
- 簡介
- 實戰用例
- OptionParser模塊
- 簡介
- parser.add_option()參數說明
- 實戰用例
- Ref
- 征集
- @[toc]
- 分析
- 優點
- 缺點
- 簡介
- 實戰用例
- 簡介
- parser.add_option()參數說明
- 實戰用例
樸素字符串匹配方案
分析
其實此方法可以很直接地表達程序猿們在邏輯這條路走了多遠。當然,這并沒有包含任何的不敬。
這的確是一種方案,甚至可以說是一種算法。因為其直截了當,所以在程序開發初期,本人也是如此樂此不疲。除了完全的一個一個的命令之外,我們還可以對參數進行json封裝,這樣就更加體貼了。
關于,這一點我想也不用多說什么的了。還是留一些時間給后面的兩種解決方案比較妥當。不過還是可以說說此方案的優點與缺點。
優點
缺點
getopt模塊
簡介
此模塊是python內置的一個模塊。該模塊是專門用來處理命令行參數的。
其基本使用格式如下:
對于getopt()方法的第一個參數,就是我們通過命令行傳入的參數。不過這里也有一個值得注意的地方,我需要對參數列表進行切片處理。因為我們獲得的第一個(args[0])命令行參數是當前文件名稱,這并不是我們需要的。
對于getopt()的第二個參數,是shortopts;第三個參數,是longopts。
shortopts比如:-h
longopts比如:–help
shortopts是以’-'為前綴的,longopts是以"- -"為前綴的.
我們也可以單獨使用短參數。基本使用格式如下:
opts, args = getopt.getopt(sys.argv[1:], "ld:")實戰用例
from __init__ import *def usage():print 'prama_config.py usage:'print '-h, --help: Print help message.'print '-v, --version: Print script version'print '-o, --output: Input an output verb'print '-m, --message: Send a message to someone.'print '--foo: Test option 'print '--fre: Another test option'def version():print 'prama_config.py 1.0.1'def output(args):print 'Hello, %s' % argsdef message(sender, receiver, msg):print("{0} Send a message to {1}, content is \'{2}\'.".format(sender, receiver, msg))def main(argv):try:opts, args = getopt.getopt(argv[1:], 'hvom:', ['help=', 'message=', 'foo=', 'fre='])except getopt.GetoptError, err:print str(err)usage()sys.exit(2)for o, a in opts:if o in ('-h', '--help'):usage()sys.exit(1)elif o in ('-v', '--version'):version()sys.exit(0)elif o in ('-o', '--output'):output(a)sys.exit(0)elif o in ('-m', '--message'):message(a, args[0], args[1])sys.exit(0)else:print 'unhandled option'sys.exit(3)if __name__ == '__main__':main(sys.argv)OptionParser模塊
簡介
前面說到getopt,不過getopt太小了,而且從代碼的角度看,面向過程的嫌疑很重。相對getopt,OptionParser就顯得比較專業級了。OptionParser通過*parser.add_option()添加選項參數,再通過parser.parse_args()*進行解析參數選項。整個過程很面向對象。
對于OptionParser還有一個優點在于,我們不需要為OptionParser設置help的選項,help選項已經被內置到模塊當中去了。
parser.add_option()參數說明
實戰用例
from optparse import OptionParserparser = OptionParser()parser.add_option("-p", "--pdbk",action="store_true", # 指示 optparse 當解析到一個命令行參數時該如何處理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" )parser.add_option("-f", "--file", # 操作指令action="store",dest="filename", # 存儲的變量type="string", # 變量類型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()if options.pdcl is True:print 'pdcl is true' if options.zdcl is True:print 'zdcl is true' if options.filename is not None:print("filename={0}".format(options.filename))print(args)通過對上面三種參數解析策略的說明,可以看到這里使用OptionParser模塊進行解析是最佳方式。
Ref
- http://blog.csdn.net/tianzhu123/article/details/7655499
- http://blog.csdn.net/lwnylslwnyls/article/details/8199454
- 《Python標準庫》
征集
如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d
總結
以上是生活随笔為你收集整理的Python命令行选项参数解析策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解Lambda
- 下一篇: Python3算法基础练习:编程100例