2016-03-29 23 views
0

我是卡上的任務,要求要麼2位置ARGS或1(文件)兩個位置參數,如果啓用標誌:使用任何一個標誌參數或argparse

parser.add_argument('pos_arg1', help='desc') 
parser.add_argument('pos_arg2', help='desc') 
parser.add_argument('--add_arg1', help='desc', type=argparse.FileType('r'), nargs='?') 

所以使用的腳本script.py arg1 arg2script.py --add_arg1 file都是有效的。我將如何做到這一點?

回答

0

如果定義:

In [422]: parser=argparse.ArgumentParser()  
In [423]: g=parser.add_mutually_exclusive_group() 
In [424]: g.add_argument('--foo') 
In [426]: g.add_argument('bar',nargs='*',default='test') 

In [427]: parser.print_help() 
usage: ipython2.7 [-h] [--foo FOO | bar [bar ...]] 

positional arguments: 
    bar 

optional arguments: 
    -h, --help show this help message and exit 
    --foo FOO 

In [429]: parser.parse_args([]) 
Out[429]: Namespace(bar='test', foo=None) 

In [430]: parser.parse_args(['one','two']) 
Out[430]: Namespace(bar=['one', 'two'], foo=None) 

In [431]: parser.parse_args(['--foo','two']) 
Out[431]: Namespace(bar='test', foo='two') 

有了這個,你可以指定兩個未標記的值(真任意數字),或--foo標記一個值。如果我同時嘗試,它會反對。我本可以將該組標記爲required

有兩點要注意:除非我指定一個defaultconst

標記--foonargs='?'比較毫無意義。

我只能在排他組中指定一個位置,並且該參數必須有'?'或'*'和'默認'。換句話說,它必須是真正可選的。

沒有mutual_exclusive_group,我可以使兩個位置?,但我不能說'零或兩個參數'。

+0

那麼,有沒有解決辦法? –

+0

爲了讓它接受2個定位或一個標記的參數,但不是兩個?解決方案是讓解析器同時接受這兩個問題,然後編寫自己的代碼進行抱怨。 – hpaulj

相關問題