2013-04-09 71 views
3

我試圖查找堆棧溢出已經答案,但無法找到我的具體情況的確切答案。Python argparse鍵=值參數

這第一個鏈接在第一部分有相同的問題,但它是沒有答案的 (python argparse: parameter=value)。這第二個問題是類似的,但我似乎無法得到它適用於我的具體情況 (Using argparse to parse arguments of form "arg= val")。

所以我的情況是這樣的 - 我正在重寫一個被其他腳本使用的python包裝器(我不希望修改這些其他腳本)。目前,python包裝被調用,其形式爲--key=value,其形式爲多個不同的參數,但是被手動解析。我想用argparse來解析它們。

N.B.參數名稱很笨拙,所以我正在使用add_argument中的dest選項進行重命名。

parser = argparse.ArgumentParser(description='Wrappin Ronnie Reagan') 
parser.add_argument("--veryLongArgName1", nargs=1, dest="arg1", required=True) 
parser.add_argument("--veryLongArgName2", nargs=1, dest="arg2") 
parser.add_argument("--veryLongArgName3", nargs=1, dest="arg3") 
userOpts = vars(parser.parse_args()) 

其中,而顯然是正確解析通過命令行,它顯示爲幫助:

usage: testing_argsparse.py [-h] --veryLongArgName1 ARG1 
         [--veryLongArgName2 ARG2] 
         [--veryLongArgName3 ARG3] 
testing_argsparse.py: error: argument --veryLongArgName1 is required 

但我想的是,所有的參數都與--key=value格式,而不是--key value規定。即

usage: testing_argsparse.py [-h] --veryLongArgName1=ARG1 
         [--veryLongArgName2=ARG2] 
         [--veryLongArgName3=ARG3] 
testing_argsparse.py: error: argument --veryLongArgName1 is required 

在此先感謝!

回答

2
testing_argsparse.py --veryLongArgName1=foo 

工程。 argparse模塊接受--veryLongArgName1=foo--veryLongArgName1 foo格式。

什麼確切的命令行參數你試圖傳遞給argparse,導致它無法正常工作?

+0

我想限制它只接受這些參數的'--key = value'格式(即不應該接受'--key value'),如果可能的話!我還想要自動生成的使用/幫助文本來反映這一要求。 – Meep 2013-04-10 03:39:51

0

稍遲,但對於任何與OP類似請求的人,您可以使用自定義HelpFormatter

然後,這可以傳遞給ArgumentParser給出想要的行爲。

parser = argparse.ArgumentParser(
    description='Wrappin Ronnie Reagan', 
    formatter_class=ArgFormatter) 

這截取ARGS(ARG1, ARG2, ...),並增加其以後替換定製前綴(與不想要的空間一起)用於=符號。返回語句中的and確保只修改非空的結果。