Argparse位置参数'*'

时间:2018-12-22 14:37:55

标签: 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 apple banana -l list

工作正常

使用nargs = argparse.REMAINDER 做出奇怪的举动。

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

谢谢

1 个答案:

答案 0 :(得分:1)

Python 3.7添加了parse_intermixed_args方法

In [70]: parser = argparse37.ArgumentParser()
In [71]: parser.add_argument('fruit', nargs = '*');
    ...: parser.add_argument('-l', '--ls');

您的错误-fruit位置被前两个字符串占用/填充。没有位置可以采取最后一个。

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'])

intermixed可以处理拆分的“位置”:

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