【问题标题】:How do I make a pair of optional parameters contingent on each other in Python?如何在 Python 中使一对可选参数相互依赖?
【发布时间】:2021-08-25 23:47:27
【问题描述】:

我有两个参数,要么都需要,要么都不需要。我想到了两种解决方案:一个带有 nargs=2 的可选参数,或者两个相互依赖的可选参数。我找到了 nargs=2 的答案,但帮助输出对用户来说似乎很混乱且不透明。我想研究制作两个相互依赖的可选参数。

如果我提供环境,我也需要提供服务,反之亦然。如果我都不提供,那也没关系。

普通的可选参数被添加到这种类型的帮助输出中:

usage: script.py [-h] [-e ENVIRONMENT] [-s SERVICE] [-u] [-d]

我想要这种类型的帮助输出(以及基本要求):

usage: script.py [-h] [-e ENVIRONMENT -s SERVICE] [-u] [-d]

是否有一个标志或简单的方法可以做到这一点,所以它会清楚地显示在帮助中?编写额外的检查来强制执行此操作是微不足道的,但让用户清楚地了解我的帮助似乎超出了我的能力范围。

与此同时,我向 argparse 添加了这样的帮助:parser.add_argument('-s', '--service', metavar='SERVICE', help='Service to use, if -e also used')

【问题讨论】:

  • 不,没有任何方法可以生成所需的用法。
  • 请注意,您可以覆盖使用参数以显示您需要的内容。

标签: python argparse optional-parameters


【解决方案1】:

虽然 argparse 目前不支持此选项,但您可以使用 subparser 作为解决方案。 每个从属参数将定义一个新的子解析器,该子解析器将包含另一个参数作为必需参数。 它有点难看,会造成一些代码重复,但它会解决你的依赖问题,并且会在帮助和错误中正确反映。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2011-09-18
    相关资源
    最近更新 更多