我的目标是使用 argparse 编写一个 Python 命令行实用程序,该实用程序具有多个命令,每个命令都有不同的所需输入集。
我尝试通读文档、一些 Google 搜索和堆栈溢出,但找不到任何内容。我可以想到一些可能的解决方案,但它们很难看,需要手动处理帮助文档和验证。我怀疑这是一种常见的、有效的解决方案已经广为人知的问题,我只是缺少合适的术语来搜索它,或者它有点晦涩难懂以至于没有张贴在很多地方。
我现在最好的想法是拥有一个位置参数,并且根据该输入的值以某种方式对一组附加参数有不同的要求。也许我会解析两次?
举个例子,这是一个类似的案例:
有一个位置参数,动物
动物选项有猫、蜥蜴、鱼
对于猫来说,爪子、 mustache 、爪子都是必需的
对于蜥蜴,需要参数 scale_color、favorite_food
对于鱼,参数 water_type 是必需的
我们希望在不诉诸非正统做法的情况下,在 -h 中记录每个不同动物值所需的附加参数。
我考虑过为每个主要类别选择添加一个可选参数。这没有吸引力,因为该实用程序实际上只想采用其中一个参数,如果我可以避免在执行和记录方面重新发明轮子,我宁愿这样做。
我可以这样做:
valid_commands = ['a','b','c','d','e','f','g']
parser.add_argument('command', choices = valid_commands)
parser.add_argument('inputs', nargs = '*')
但是我没有对每个命令选择的附加参数进行良好的输入检查。
有没有一些正常的方法可以做到这一点?当然,编写具有多个可能的命令以及每个命令所需的不同参数的实用程序是相当普遍的。我肯定可以通过添加手动检查和帮助文档来满足我的大部分需求,但这种事情我可能会做足够多的时间,值得在第一次尝试时就把它做好。
感谢阅读,如果我可以帮助提供信息,请告诉我。
最佳答案
这似乎就是子解析器的用途?
http://docs.python.org/dev/library/argparse.html#argparse.ArgumentParser.add_subparsers
关于Python 和 argparse : how to vary required additional arguments based on the first argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061043/