【问题标题】:How to allow required arguments to be omitted when a specific flag is used?使用特定标志时如何允许省略所需的参数?
【发布时间】:2021-07-09 15:23:21
【问题描述】:

我的代码如下。

__version__ = 'v10'

class MyHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
       def _get_help_string(self, action):
              return action.help

def main():
       parser = argparse.ArgumentParser(
              formatter_class=MyHelpFormatter,
              description=__version__
       )

       parser.print_usage = parser.print_help

       parser.add_argument("file", help="path to file/directory")

       parser.add_argument(
              "-t",
              "--type",
              type=str,
              default=False,
              help="file type",
       )

       parser.add_argument(
              "-c",
              "--config",
              action="store_true",
              help="change custom text",
       )

       parser.add_argument(
              "-v",
              "--version",
              action='version',
              version=__version__,
              help="thumb-gen version",
       )

在我的代码中,它总是需要“文件”参数。没关系。

现在我想在使用“--config”参数调用时调用一个函数。但是当我运行 main.py --config 时,它还需要 'file' 参数。

如何在不输入所需参数的情况下使用“-config”参数?

【问题讨论】:

  • 这能回答你的问题吗? Require either of two arguments using argparse
  • 您的代码从不调用parser.parse_args()main(),而且还有很多看起来与问题无关的东西。请提供minimal reproducible example。如果你想用,我写了一个here in a gist
  • @MauriceMeyer 当我使用该解决方案时,“文件”参数需要一个标志。我的代码中不需要“文件”标志。有解决办法吗?
  • 通常最干净的解决方案是使--file 具有良好默认值的可选。这样你就不用关心用户是否提供了值。
  • 类似这样的:group.add_argument('--file', nargs='?') 或默认值。

标签: python python-3.x argparse


【解决方案1】:

有两种方法可以解决这个问题。首先,您可以将文件参数设为可选。解析完成后,您的代码会检查 --config 标志是否存在——如果不存在,则检查是否给出了文件参数。如果不是,请退出并显示相应的错误消息。

您也可以使用 两个 解析器。第一个查找--config 并设置一个标志(例如do_config = True);它不需要文件参数。然后使用第二个解析器,如果 do_config 为 False,则该解析器只需要文件参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2021-12-29
    • 2020-12-22
    相关资源
    最近更新 更多