如何使 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
的签名匹配。示例:
cli --analyse key1 --version
cli --analyse key2 --help
cli --analyse key1 --version key2 --help
如果我 运行 1、2 或 3,而不是继续 analyse
执行,argparse
执行:
--version
为 1;
--help
为 2;
--version
为 3;
对于给定的场景,命令以 --analyse
开头,我希望后续的 --version
和 --help
被解释为 [= 的选项12=] 而不是与签名匹配的命令。这可能吗?
您可以使用argparse.Remainder
(last 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)
假设我有以下设置:
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
的签名匹配。示例:
cli --analyse key1 --version
cli --analyse key2 --help
cli --analyse key1 --version key2 --help
如果我 运行 1、2 或 3,而不是继续 analyse
执行,argparse
执行:
--version
为 1;--help
为 2;--version
为 3;
对于给定的场景,命令以 --analyse
开头,我希望后续的 --version
和 --help
被解释为 [= 的选项12=] 而不是与签名匹配的命令。这可能吗?
您可以使用argparse.Remainder
(last 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)