2014-03-18 31 views
2

这就是我想要做的:蟒蛇-argparse:指定一个选择,每个参数

parser.add_argument('-io', 
    nargs = 2, 
    type = int, 
    metavar = ('input','output'), 
    choices = (range(1,65),range(1,5)), 
    help = 'set input -> output.' 
) 

所以我的输入范围为(1〜64)和我的输出范围为(1〜4)。

谢谢!

+0

你真的应该把它分成多行,没有人想水平滚动 – slezica

+0

谢谢大家! – Federico

回答

1

你应该把它分割成2个独立的参数:

parser.add_argument('-i', type=int, metavar='input', choices=range(1,65), help='set input.') 
parser.add_argument('-o', type=int, metavar='output', choices=range(1,5), help='set output.') 

或者,如果你真的想用一个参数,你可以做手工检查:

parser.add_argument('--io', nargs=2, type=int, metavar=('input', 'output'), help='set input (1 to 64) -> output (1 to 4).') 
# ... 
args = parser.parse_args(argv[1:]) 

input, output = args.io 
if input < 1 or 64 < input: 
    raise ValueError("input:{!r} must be between 1 and 64.".format(input)) 
if output < 1 or 4 < output: 
    raise ValueError("output:{!r} must be between 1 and 4.".format(output)) 
+1

第三个选项是一个自定义'类型'。但我更喜欢你的建议。 – hpaulj

0

最简单的方法是将这些作为单独的参数添加到解析器中。

parser.add_argument( ' - I',类型= INT,metavar = '输入',选择=范围(1,65),帮助= '设置输入')

parser.add_argument(' - O- ',type = int,metavar ='output',choices = range(1,5),help ='set output。')