將 optparse 程式碼遷移到 argparse¶
argparse 模組提供了一些高階功能,這些功能在 optparse 模組中並未原生提供,包括:
處理位置引數。
支援子命令。
允許替代選項前綴,如
+和/。處理零或多個 (zero-or-more) 和一個或多個 (and one-or-more) 樣式的引數。
產生更多資訊的使用訊息。
為自訂
type和action提供了一個更簡單的介面。
最初 argparse 模組試圖保持與 optparse 的相容性,但在基礎設計上的存在差異 -- 支援宣告式 (declarative) 命令列選項處理 (同時將位置引數處理留給應用程式的程式碼) 和在宣告式介面中支援命名選項 (named options) 和位置引數 -- 代表 API 隨著時間的推移已經與 optparse API 分歧。
如 選擇一個命令列參數剖析函式庫 中所述,目前使用 optparse 並對其運作方式滿意的應用程式可以繼續使用 optparse。
在決定是否遷移之前,應用程式開發人員應該先檢閱該段落中描述的內在行為差異清單,來決定是否值得遷移。
對於選擇從 optparse 遷移到 argparse 的應用程式,以下建議應會有所幫助:
將所有
optparse.OptionParser.add_option()呼叫替換為ArgumentParser.add_argument()呼叫。將
(options, args) = parser.parse_args()替換為args = parser.parse_args(),並為位置引數新增額外的ArgumentParser.add_argument()呼叫。請記住,以前稱為options的東西,在argparse情境中現在稱為args。使用
parse_intermixed_args()來替換掉optparse.OptionParser.disable_interspersed_args(),而不是使用parse_args()。將回呼動作和
callback_*關鍵字引數替換為type或action引數。將
type關鍵字引數的字串名稱替換為相應的類型物件 (例如 int、float、complex 等)。將
optparse.Values替換為Namespace,並將optparse.OptionError和optparse.OptionValueError替換為ArgumentError。將隱式引數的字串,如
%default或%prog替換為使用字典來格式化字串的標準 Python 語法,即%(default)s和%(prog)s。將 OptionParser 建構函式的
version引數替換為呼叫parser.add_argument('--version', action='version', version='<the version>')。