Python 3.x Argparse位置参数'*';

Python 3.x Argparse位置参数'*';,python-3.x,argparse,Python 3.x,Argparse,我需要像下面这样解析命令行 script.py apple banana -l list pineapple 水果应该放在一个列表中,-n标志放在另一个标志中 我正试图用你的方式解决这个问题 parser = argparse.ArgumentParser() parser.add_argument('fruit', nargs = '*') parser.add_argument('-l', dest = ls) 使用此示例,我得到以下错误: 菠萝 注意,使用 script.py appl

我需要像下面这样解析命令行

script.py apple banana -l list pineapple
水果应该放在一个列表中,-n标志放在另一个标志中

我正试图用你的方式解决这个问题

parser = argparse.ArgumentParser()
parser.add_argument('fruit', nargs = '*')
parser.add_argument('-l', dest = ls)
使用此示例,我得到以下错误: 菠萝

注意,使用

script.py apple banana -l list
很好

使用nargs=argparse.rements 让我们做一个奇怪的行为

所有参数都放在“水果”列表中


谢谢

Python3.7添加了一个
parse\u mixed\u args
方法

In [70]: parser = argparse37.ArgumentParser()
In [71]: parser.add_argument('fruit', nargs = '*');
    ...: parser.add_argument('-l', '--ls');
您的错误-前两个字符串使用/填充了
水果
位置。没有一个位置可以选择最后一个

In [72]: parser.parse_args('apple banana -l list pinaple'.split())
usage: ipython3 [-h] [-l LS] [fruit [fruit ...]]
ipython3: error: unrecognized arguments: pinaple
...
parse_known_args
在另一个列表中返回这些附加值,而不是引发错误:

In [73]: parser.parse_known_args('apple banana -l list pinaple'.split())
Out[73]: (Namespace(fruit=['apple', 'banana'], ls='list'), ['pinaple'])
mixed
可以处理拆分的“位置”:

In [74]: parser.parse_intermixed_args('apple banana -l list pinaple'.split())
Out[74]: Namespace(fruit=['apple', 'banana', 'pinaple'], ls='list')

菠萝应该去哪里“苹果”和“香蕉”填满了
水果
的论据。没有其他位置参数可以接受额外的字符串。一般来说,使用几个变量
nargs
positional参数会有问题谢谢,看来我不得不使用3.7版。