Argparse-带有必要和不必要参数的标记的便捷方法?

时间:2019-06-14 08:37:03

标签: python python-3.x argparse

我有一个问题:我希望程序中的标志接受两个必要的参数,并且其中一部分具有四个不必要的选项,并且可以相互使用(例如,选项1,2和4开启,只有选项1和4开启等)。我找到了subargs选项,但是如果我理解正确的话,其中的选项是唯一的,并且一次只能运行一个选项。现在,我有了所有选项的列表,并对其进行了排序,然后将这些列表分为4个不同的列表,但这是不方便的方式(而且我认为是非专业的)。我该如何解决这个问题?

示例:

python3 main.py --make_it source target option1 itsargs option2 itsargs moreofitsargs option3 evenmoreargs option4 213 andevenmoreags

1 个答案:

答案 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,没有加法参数的选项将收到一个空列表([]

相关问题