2014-03-31 53 views
3

我正在學習argparse模塊,我想問0或2個文件。要求0或2個位置參數whit argparse?

parser.add_argument("infile", nargs = {0,2}, type=argparse.FileType('r')) 

應該一起工作:

python prog.py 
    python prog.py infile1 infile2 

但不是: '?'

python prog.py infile1 
    python prog.py infile1 infile2 infile3 

其實我用2個不同的論點「NARGS =我測試

sys.argv == 1 or sys.argv == 3 

所以,如果你能幫助:)

+0

您是否測試過'sys.argc == 1或sys.argc == 3'? 'sys.argv'是一個列表是永遠不會去「==」的一個整數。 –

回答

3

我想這一次,發現​​不支持它本身,所以我寫的這個樣子。

#!/usr/bin/env python 

import argparse as ap 

parser = ap.ArgumentParser(usage='%(prog)s [-h] [a b]\n') 
parser.add_argument('ab', 
        nargs='*', 
        help='specify 2 or 0 items', 
        default=['a', 'b']) 

args = parser.parse_args() 
if len(args.ab) != 2: 
    parser.error('expected 2 arguments') 

print(args.ab) 

請注意,在創建解析器時會覆蓋使用消息,因爲默認的使用消息在其他情況下會產生誤導。

+0

在http://bugs.python.org/issue11354中有一個建議的補丁,其中'nargs'可以是(幾乎)任何're'接受的關於參數數目的任何東西。在該用途中,{0,2}表示範圍,而不是2個端點。 – hpaulj

相關問題