【问题标题】:Python and argparse: how to vary required additional arguments based on the first argument?Python 和 argparse:如何根据第一个参数改变所需的附加参数?
【发布时间】:2012-12-13 05:15:27
【问题描述】:

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

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

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

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

只有一个位置参数,动物

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

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

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

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

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

感谢阅读,如果我能提供信息,请告诉我。

【问题讨论】:

    标签: python command-line-arguments argparse


    【解决方案1】:

    【讨论】:

    • 看来子解析器是我要找的。需要花一点时间才能弄清楚在实施方面需要发生什么,但这绝对解决了我的问题。
    猜你喜欢
    • 2020-11-03
    • 2018-11-13
    • 2011-10-07
    • 2016-12-18
    • 2013-09-13
    • 2015-07-24
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多