-1
在python腳本中我想要有三個位置參數和兩個可選參數(包括'help')。所以,我需要的是像下面argparse - python
正確:
./myscript.py ONE TWO THREE
./myscript.py --list
錯誤:
./myscript.py ONE TWO THREE --list
我要讓所有的位置參數,並使用argparse本身可選的參數爲互斥。
在python腳本中我想要有三個位置參數和兩個可選參數(包括'help')。所以,我需要的是像下面argparse - python
正確:
./myscript.py ONE TWO THREE
./myscript.py --list
錯誤:
./myscript.py ONE TWO THREE --list
我要讓所有的位置參數,並使用argparse本身可選的參數爲互斥。
這approxmates你想要什麼:
class Three(argparse.Action):
# custom action that requires 0 or 3 values
def __call__(self,parser,namespace,values,option_string):
if len(values) in [0,3]:
setattr(namespace, self.dest, values)
else:
raise argparse.ArgumentError(self,'must have 3 values')
custom = 'usage: %(prog)s [-h] (--list | ONE TWO THREE)'
p=argparse.ArgumentParser(prog='PROG',usage=custom)
g=p.add_mutually_exclusive_group(required=True)
g.add_argument('--list',action='store_true')
g.add_argument('pos',nargs='*',default=[],action=Three)
,它提出了一個錯誤,如果雙方--list
和pos
給出,如果沒有給出,或者pos
值的數量並不3.我包括在內,因爲自定義使用默認爲:
usage: PROG [-h] (--list | pos [pos ...])
你好。你的問題對於ServerFault來說是離題的,並且對於基於更多編碼的StackOverflow可能會更好。 – tombull89
http://docs.python.org/howto/argparse.html#id1 –
我使用條件制定瞭解決方案。據我所知,使用argparse本身沒有辦法做到這一點。當前版本的argparse僅支持一種情況下的互斥選項。像[A | B]而不是[A,B,C | D] – Suku