我有一个问题:我希望程序中的标志接受两个必要的参数,并且其中一部分具有四个不必要的选项,并且可以相互使用(例如,选项1,2和4开启,只有选项1和4开启等)。我找到了subargs选项,但是如果我理解正确的话,其中的选项是唯一的,并且一次只能运行一个选项。现在,我有了所有选项的列表,并对其进行了排序,然后将这些列表分为4个不同的列表,但这是不方便的方式(而且我认为是非专业的)。我该如何解决这个问题?
示例:
python3 main.py --make_it source target option1 itsargs option2 itsargs moreofitsargs option3 evenmoreargs option4 213 andevenmoreags
答案 0 :(得分:0)
(与Posix兼容)标准方法是使用前缀字符(通常为'-'
)来引入可选参数。但是您可以更改该前缀字符。
一个简单的技巧就是为 sub选项使用备用前缀,例如'/'
。
命令行为:
python3 main.py --make_it source target /option1 itsargs /option2 itsargs moreofitsargs /option3 evenmoreargs /option4 213 andevenmoreags
我认为在初始解析之后,您(或多或少)有:
make_it_args = ['source', 'target', '/option1', 'itsargs', '/option2', 'itsargs', 'moreofitsargs', '/option3', 'evenmoreargs', '/option4', '213', 'andevenmoreag']
make_it_parser = argparse.ArgumentParser(prefix_chars='/')
make_it_parser .add_argument('source')
make_it_parser .add_argument('target')
for i in range(1,5):
make_it_parser ='/option'+str(i)
make_it_parser .add_argument(name, nargs='*') # accept any number of arguments including none
您可以使用它来解析此内容:
make_it_ns = make_it_parser .parse_args(make_it_args )
提供make_it_ns:
Namespace(option1=['itsargs'], option2=['itsargs', 'moreofitsargs'], option3=['evenmoreargs'],
option4=['213', 'andevenmoreag'], source='source', target='target')
与往常一样,不存在的选项的值为None
,没有加法参数的选项将收到一个空列表([]
)