Python和argparse:如何根据第一个参数改变所需的附加参数?

时间:2012-12-27 20:41:57

标签: python command-line-arguments argparse

我的目标是使用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 = '*')

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

这是否有一些正常的方法?当然,编写一个具有多个可能命令的实用程序以及每个命令的不同必需参数是相当普遍的。通过添加手动检查和帮助文档,我绝对可以获得大多数我想要的东西,但是这种情况我可能会做足够的时间,以便在第一次尝试时做到这一点。

感谢阅读并告诉我是否可以提供相关信息。

1 个答案:

答案 0 :(得分:8)