如何使 Python argparse 正确解释与命令匹配的参数?

How to make Python argparse correctly interpret an argument that matches a command?

假设我有以下设置:

parser.add_argument('-v', '--version', help='Print version',  action='version', version=VERSION)
parser.add_argument('-a', '--analyse', help='Analyse command execution',  nargs='*', action='append')

命令analyse接收n个选项进行分析。这些选项可能与命令 --version and/or --help 的签名匹配。示例:

  1. cli --analyse key1 --version
  2. cli --analyse key2 --help
  3. cli --analyse key1 --version key2 --help

如果我 运行 1、2 或 3,而不是继续 analyse 执行,argparse 执行:

对于给定的场景,命令以 --analyse 开头,我希望后续的 --version--help 被解释为 [= 的选项12=] 而不是与签名匹配的命令。这可能吗?

您可以使用argparse.Remainderlast bullet point here in the doc中的解释):

import argparse

VERSION = "1.0"
parser = argparse.ArgumentParser(description='Argparse test')
parser.add_argument('-v', '--version', help='Print version',  action='version', version=VERSION)
parser.add_argument('-a', '--analyse', help='Analyse command execution',  nargs=argparse.REMAINDER, action='append')
args = parser.parse_args()

if args.analyse:
    print(args.analyse)