2012-01-21 28 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

相关问题