-3

AB是未定義的參數集,C是位置參數列表;我想開發這個論點語法:一個argparse的案例

program.py A (-sp (-P PP | -W | -w) | 
       (-sP PSP | -sW | -sw) (-dP PDP | -dW | -dw) 
      ) B C 

然而我覺得嵌套要求這種情況下不argparse考慮。

對於XY problem傢伙:-sp打算--same-password-P打算--with-this-password(提供),PP打算PROVIDED_PASSWORD-W打算--password(它要求運營商),-w打算--no-password-sP打算--with-this-source-password(提供),PSP打算PROVIDED_SOURCE_PASSWORD-sW打算--source-password(它要求運營商),-sw打算--no-source-password-dP打算--with-this-destination-password(提供),PDP打算PROVIDED_DESTINATION_PASSWORD-dW打算--destination-password(這是要求運營商),-dw打算--no-destination-password

如果確實在argparse中考慮了案件並且缺少答案,請留下答案。

如果您知道案例並知道從argparse走哪條路,如果需要離開,請留下建議。

+0

http://bugs.python.org/issue11588 - 嘗試添加實現全部邏輯條件的嵌套參數組。 – hpaulj 2014-10-29 16:34:25

回答

1

您可以提供多個接受標誌/參數argparse:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-sp', '--same-password') 
parser.add_argument('-P', '--with-this-password') 

args = parser.parse_args(['-sp', 'foo', '--with-this-password', 'bar']) 
print args.same_password 

這將打印foo

如果我正確地閱讀你的問題,這並沒有真正回答它,但我會建議你嚴重複雜化你的腳本的參數。您可能需要爲每個可能的狀態添加不同的參數,或者您可能需要考慮配置文件。

命令行程序通常接受參數作爲標誌或鍵值對。當你提出具體的論點順序時,會增加使用程序的複雜性。這很合適。如果確實是合適的,那麼你可能想要查看一個使用類似風格的程序的源代碼(例如bash find命令)。

+0

我不關心參數的具體順序,而是有效的參數組合。我可能會在[http://stackoverflow.com/questions/13788333/python-argumentparser-nested-arguments](http://stackoverflow.com/questions/13788333/python-argumentparser-nested-arguments)中擴展ArgumentParser來定義參數依賴關係和參數在其他參數和參數互斥排除組之間相互排斥組。 – uprego 2014-10-29 11:05:36

+0

我可能最終會使用argparse子分析器,但是我真的很懷念參數依賴關係,因爲它可能已經被開發出來了。 – uprego 2014-10-29 11:15:16

+1

然後,您最好在argparse之外檢查您的特定組合。您仍然可以通過將簡單參數解析爲易於訪問的表單來從argparse中獲得價值。 – 2014-10-29 11:21:00