2014-01-22 44 views
6

是否有可能爲argparse解析相結合的標誌是這樣的:的Python argparse允許組合標誌

app.py -bcda something 

在這種情況下,我想something設置爲-a,其餘的將被保存爲True。基本上:

app.py -b -c -d -a something 

我知道大多數程序都允許這樣做,例如, grep -rEw,但用argparse做這件事有多難?

編輯:答案是它是開箱即用的。我甚至懶得去嘗試。

+2

正如Chris Barker指出的,答案是使用'-bcda'而不是'-abcd'。結合是一種可以直接使用的東西。 – Ray

回答

3

您可以store_const實現這一目標:

parser = argparse.ArgumentParser() 
parser.add_argument('-a', action='store_const', const=True, default=False) 
parser.add_argument('-b', action='store_const', const=True, default=False) 
args = parser.parse_args() 

然後你就可以用-a -b-ab(或-a,或-b)從命令行調用它。

編輯:如果你想要一個標誌採取一個參數,你需要將它作爲鏈的最後一項傳遞。所以如果a需要一個參數,你需要做-bcda something

+0

'action ='store_true'更簡潔。 – hpaulj

1

這裏是我發現了一個小Googling:

幾個短選項可以連接在一起,只使用一個單一的 - 前綴,只要僅最後一個選項(或沒有人)需要 值:

>>> parser = argparse.ArgumentParser(prog='PROG') 
>>> parser.add_argument('-x', action='store_true') 
>>> parser.add_argument('-y', action='store_true') 
>>> parser.add_argument('-z') 
>>> parser.parse_args('-xyzZ'.split()) 
Namespace(x=True, y=True, z='Z') 

http://docs.python.org/dev/library/argparse.html#option-value-syntax