gpt4 book ai didi

Python argparse : Combine optional parameters with nargs=argparse. 剩余部分

转载 作者:太空狗 更新时间:2023-10-29 20:54:17 26 4
gpt4 key购买 nike

我一定遗漏了一些明显的东西。目标是使用 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

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

input: ['req1value', '--opt1', 'opt1value']
Namespace(leftovers=['--opt1', 'opt1value'], opt1=None, req1='req1value')
Namespace(leftovers=None, opt1='opt1value', req1='req1value')

如果有额外的参数,opt1 的值在 parser1 中丢失,parser2 就会混淆:

input: ['req1value', '--opt1', 'opt1value', 'r1', 'r2']
Namespace(leftovers=['--opt1', 'opt1value', 'r1', 'r2'], opt1=None, req1='req1value')
usage: py-argparse.py [-h] [--opt1 OPT1]
[-leftovers [LEFTOVERS [LEFTOVERS ...]]]
req1
py-argparse.py: error: unrecognized arguments: r1 r2

预期的输出应该是:

Namespace(leftovers=['r1', 'r2'], opt1='opt1value', req1='req1value')

看起来这应该是一个简单的案例,这里的内容是从我真正想做的事情中简化而来的。我试过将剩菜剩菜设为可选,添加各种其他选项,但没有什么比这更好的了。

如有任何帮助,我们将不胜感激。

最佳答案

你可以使用parse_known_args:

import argparse
parser = argparse.ArgumentParser(description='Parser demo.')
parser.add_argument('req1', help='first required parameter')
parser.add_argument('--opt1', help='first optional parameter')

args, leftovers = parser.parse_known_args(['req1value', '--opt1', 'opt1value'])
print(args, leftovers)
# (Namespace(opt1='opt1value', req1='req1value'), [])

args, leftovers = parser.parse_known_args(['req1value', '--opt1', 'opt1value', 'r1', 'r2'])
print(args, leftovers)
# (Namespace(opt1='opt1value', req1='req1value'), ['r1', 'r2'])

关于Python argparse : Combine optional parameters with nargs=argparse. 剩余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622798/

26 4 0