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