2012-01-21 27 views
2

我想使用argparse取一些(3)整數參數,並將它們用作程序體中的變量。運行下面的代碼,每個變量都存儲在一個元素列表中。這當然不是什麼大問題,但是可以設置解析器來將每個值放入一個簡單的整數變量中嗎?可以argparse存儲位置數參數作爲簡單的變量?

import argparse 

def main(): 
    parser = argparse.ArgumentParser(description='three positional integer arguments.') 
    parser.add_argument('picks', type=int, nargs='+', default=10, 
         help='number of selections per execution') 
    parser.add_argument('minchunk', type=int, nargs='+', default=2, 
         help='min chunk size') 
    parser.add_argument('maxchunk', type=int, nargs='+', default=8, 
         help='max chunk size') 

    args = parser.parse_args(['1', '2', '3']) 
    print args 
    return 0 
+0

如果你這樣做,你突然得到完全不同和不兼容的類型取決於有多少數字傳遞。如果你想支持多個值,只需要使用一個列表。 – delnan

回答

2

nargs = '+'告訴​​收集1個或多個參數列表中。 如果刪除nargs = '+'

import argparse 

def main(): 
    parser = argparse.ArgumentParser(
     description = 'three positional integer arguments.') 
    parser.add_argument('picks', type = int, default = 10, nargs = '?', 
         help = 'number of selections per execution') 
    parser.add_argument('minchunk', type = int, default = 2, nargs = '?', 
         help = 'min chunk size') 
    parser.add_argument('maxchunk', type = int, default = 8, nargs = '?', 
         help = 'max chunk size') 

    args = parser.parse_args() 
    print args 

main() 

產生

Namespace(maxchunk=3, minchunk=2, picks=1) 
+0

謝謝,這讓我走上了正軌。不幸的是,對於nargs的默認值,參數不是可選的;如果沒有提供3,則會引發錯誤('參數太少'或'無法識別的參數')。使用nargs ='?'似乎對我來說是正確的選擇,如果存在一個值,它將消耗一個值,否則使用默認值。如果提供了3個以上的參數,則會根據情況提出'無法識別的參數'錯誤。 – thermalCat

+0

thermalCat,感謝您的反饋。我已經添加了'nargs ='?',所以默認值有效。 – unutbu

0

是這樣的嗎?

(a,b,c) = parser.parse_args(['1','2','3']) 
+0

如果您覺得如此傾向,您甚至可以省去第一組括號。 – Thomas

相關問題