我有一個問題,我試圖找到解決方案。我不確定我是否可以用argparse做到這一點。在Python中解析參數
我希望能夠指定一個選項
myprog -a 1
myprog -a 2
現在,當我有一個= 1,我希望能夠指定b和Ç。但是當a = 2,我只能指定d。
myprog -a 1 -b 3 -c 0
myprog -a 2 -d 3
而且一個必須始終指定
我有一個問題,我試圖找到解決方案。我不確定我是否可以用argparse做到這一點。在Python中解析參數
我希望能夠指定一個選項
myprog -a 1
myprog -a 2
現在,當我有一個= 1,我希望能夠指定b和Ç。但是當a = 2,我只能指定d。
myprog -a 1 -b 3 -c 0
myprog -a 2 -d 3
而且一個必須始終指定
你不能切換值作爲一個單一的parse_args
調用做到這一點,但你可以做的一個:
a
,然後根據第一次調用的結果選擇附加的解析器參數進行解析。訣竅是在第一次調用時使用parse_known_args
,所以它處理a
(它承認)並忽略其他所有內容。例如,對於方法#2,你可以這樣做:
缺點這種方法是,使用信息吐出來,不正確的使用將是不完整的;您必須手動在基本解析器中包含指定「真實」用法的文本,這並不好玩。 Subparsers不能基於值切換進行切換,但它們具有統一的一致用法顯示。
最簡單的解決方案是讓'-a'
一個required=True
說法,並與未所需的默認離開他人。然後解析執行args.a
和其他值(我假設你可以編寫這種Python邏輯)的測試。
您可以提出自己的錯誤,或者您可以使用parser.error("I don't like your input")
呼叫。
你需要編寫一個自定義usage
行。鑑於這些要求,什麼是有意義的用法?
有一個mutually exclusive argument group
方法,但它不使用特定的值,只是存在或不存在參數。
您也可以將測試合併到自定義Action類中。但通常這比解析後執行測試更復雜(因爲argparse處理以任何順序出現的參數)。
將-a
參數轉換爲子分析器的另一種可能性。這允許您爲一個「解析器」值定義一組參數,併爲另一個值定義另一組參數。我認爲,這些argparse文檔已經足夠清晰。