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>')
。