我希望能够支持基于先验谓词进入不同列表的位置命令行参数。
例如,如下命令:
mycommand one two three
会产生类似args的参数:
main_dest = ['one','two','three']
other_dest = []
但命令如下:
mycommand one --other two three --main four five
会产生类似args的参数:
main_dest = ['one','four','five']
other_dest = ['two','three']
从概念上讲,我想要的是一种修改位置参数阅读器的dest
的动作。
答案 0 :(得分:1)
第一次尝试,这套动作似乎可以解决问题:
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
显示了什么,但是位置仅在开始时起作用。如果放在末尾,它们将覆盖标记的值。而且“其他”位置永远不会获得值-因此我应该省略它。
因此可以玩这样的游戏,但我不确定它是否可靠,或者对您的用户来说更简单。