В качестве первой попытки этот набор действий, кажется, делает свое дело:
In [73]: parser = argparse.ArgumentParser()
In [74]: parser.add_argument('main', nargs='*');
In [75]: parser.add_argument('other', nargs='*');
In [76]: parser.add_argument('--main', action='append');
In [77]: parser.add_argument('--other', action='append');
In [78]: parser.print_usage()
usage: ipython3 [-h] [--main MAIN] [--other OTHER]
[main [main ...]] [other [other ...]]
In [79]: parser.parse_args('one two three'.split())
Out[79]: Namespace(main=['one', 'two', 'three'], other=[])
In [80]: parser.parse_args('one --other two --main three'.split())
Out[80]: Namespace(main=['one', 'three'], other=['two'])
74 и 76 оба имеют main
в качестве dest
.Я использую append
для помеченных, чтобы они не перезаписывали позиционные значения.Но, несмотря на то, что показывает usage
, позиционеры будут работать только на старте.Если поставить конец, они будут перезаписывать помеченные значения.И «другое» позиционное положение никогда не получит значений, поэтому я должен был его опустить.
Так что можно играть в подобные игры, но я не уверен, что он надежен или проще для ваших пользователей.
argparse: сгладить результат действия = 'append'