2011-01-14 61 views
4

我怎樣才能讓argparse這樣做:Python的argparse互斥ARGS

[ 'all' | [ pos1 [ pos2 [ pos3 ...]]]] --some --other --flags 

其中all是保留字(使它成爲一個標誌不會是確定的,如果它不需要-前綴)

二: 是有可能有一個名爲參數,如-h--help意思相同的選項一些別名?也許我應該試試add_mutually_exclusive_group()

回答

4

add_mutually_exclusive_group()正是爲此設計的 - 您試圖添加一個互斥組。

在問候你問題的第二部分,這應該做你想做的:

parser.add_argument('-f', '--foobar') 

(注意:你的問題是有點混亂 - 有有兩個問題,第二個問題跑直入關於第一個問題的另一句話。不給就更不用說了許多錯別字......我會盡力幫助,但更清楚你可以更清晰,我們可以回答你的問題。)

更新 我可以告訴互斥參數必須是必需的,但位置參數不能是必需的。因此,位置參數不能相互排斥(大概是因爲否則解釋者將不能說出什麼是什麼)。出於您的目的,我不認爲這真的很重要,因爲解釋您的論點的代碼實際上會以任何方式相同。

假設你可以做到這一點您要那麼方法必須做這樣的事情:

# all == True 
# pos == ('this', 'that', 'theother') 

if all == true: 
    do_some_stuff('all') 
else: 
    do_some_other_stuff('positional arguments') 

,如果你接受而「所有」作爲您的位置參數之一,你會做這個:

# pos = ('all', 'this, 'that', 'theother') 

if pos[0] == 'all': #other parameters are ignored 
    do_some_stuff('all') 
else: 
    do_some_other_stuff('positional arguments') 

除非你有一些具體的原因,我認爲沒有理由不這樣做後一種方式。

+0

所以'all'應該是一個標誌param和'pos'是一個位置參數,兩者都應該進入一個相互獨佔​​的組? 對不起,但這並沒有訣竅 位置和標誌似乎不會進入同一組。 我也不斷收到一個「ValueError:互斥參數必須是可選的」 – michael 2011-01-17 09:03:30