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