小编OPu*_*ide的帖子

Python argparse:将可选参数与nargs = argparse.REMAINDER组合在一起

我一定错过了一些明显的东西.目标是使用argparse和第一个参数,第二个可选参数和任何其他剩余参数可选.

为了表明这个问题我做了两个测试解析器; 它们之间的唯一区别是在一个中使用nargs = argparse.REMAINDER而在另一个中使用nargs ='*'.

def doParser1(argsin):
    parser = argparse.ArgumentParser(description='Parser demo.')
    parser.add_argument('req1', help='first required parameter')
    parser.add_argument('--opt1', help='first optional parameter')
    parser.add_argument('leftovers', nargs=argparse.REMAINDER,
                    help='all the other parameters')
    argsout = parser.parse_args(args=argsin)
    print argsout
    return argsout

def doParser2(argsin):
    parser = argparse.ArgumentParser(description='Parser demo.')
    parser.add_argument('req1', help='first required parameter')
    parser.add_argument('--opt1', help='first optional parameter')
    parser.add_argument('leftovers', nargs='*',
                    help='all the other parameters')
    argsout = parser.parse_args(args=argsin)
    print argsout
    return argsout
Run Code Online (Sandbox Code Playgroud)

如果没有额外的参数,parser2可以工作.这是解析器1和解析器1后面的输入:

input: ['req1value', '--opt1', 'opt1value']
Namespace(leftovers=['--opt1', 'opt1value'], opt1=None, req1='req1value')
Namespace(leftovers=None, opt1='opt1value', req1='req1value')
Run Code Online (Sandbox Code Playgroud)

如果有额外的参数,则在parser1中会遗漏opt1值,而parser2只会混淆:

input: ['req1value', '--opt1', 'opt1value', 'r1', 'r2']
Namespace(leftovers=['--opt1', …
Run Code Online (Sandbox Code Playgroud)

python argparse

9
推荐指数
2
解决办法
4241
查看次数

标签 统计

argparse ×1

python ×1