8

我的目标是使用 argparse 编写一个 Python 命令行实用程序,该实用程序具有多个命令,每个命令都有不同的所需输入集。

我尝试通读文档、一些谷歌搜索和堆栈溢出,但找不到任何东西。我可以想到一些可能的解决方案,但它们很丑陋,需要手动处理帮助文档和验证。我的怀疑是,这是一种已经广为人知的常见有效解决方案的问题,而我只是缺乏正确的术语来搜索它,或者它太模糊了,以至于没有发布在不少地方。

我现在最好的想法是有一个位置参数,并且基于该输入的值对一组附加参数有不同的要求。也许我会解析两次?

例如,这是一个类似的情况:

有一个位置论点,动物

动物的选择是猫、蜥蜴、鱼

对于猫,参数爪,胡须,爪子是必需的

对于蜥蜴,参数 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 = '*')

但是我没有对每个命令选择的附加参数进行良好的输入检查。

有没有一些正常的方法可以做到这一点?当然,编写一个具有多个可能命令的实用程序以及每个命令所需的不同参数是相当普遍的。通过添加手动检查和帮助文档,我绝对可以满足我的大部分需求,但这种事情我可能会做足够多的时间,所以在第一次尝试时就做好是值得的。

感谢您阅读,如果我可以帮助提供信息,请告诉我。

4

1 回答 1

12

这似乎是子解析器的用途?

http://docs.python.org/dev/library/argparse.html#argparse.ArgumentParser.add_subparsers

于 2012-12-27T20:46:10.453 回答