我怎樣才能讓argparse這樣做:Python的argparse互斥ARGS
[ 'all' | [ pos1 [ pos2 [ pos3 ...]]]] --some --other --flags
其中all
是保留字(使它成爲一個標誌不會是確定的,如果它不需要-
前綴)
二: 是有可能有一個名爲參數,如-h
和--help
意思相同的選項一些別名?也許我應該試試add_mutually_exclusive_group()
?
我怎樣才能讓argparse這樣做:Python的argparse互斥ARGS
[ 'all' | [ pos1 [ pos2 [ pos3 ...]]]] --some --other --flags
其中all
是保留字(使它成爲一個標誌不會是確定的,如果它不需要-
前綴)
二: 是有可能有一個名爲參數,如-h
和--help
意思相同的選項一些別名?也許我應該試試add_mutually_exclusive_group()
?
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')
除非你有一些具體的原因,我認爲沒有理由不這樣做後一種方式。
所以'all'應該是一個標誌param和'pos'是一個位置參數,兩者都應該進入一個相互獨佔的組? 對不起,但這並沒有訣竅 位置和標誌似乎不會進入同一組。 我也不斷收到一個「ValueError:互斥參數必須是可選的」 – michael 2011-01-17 09:03:30