Python 使用argparse创建相互包含的位置参数

Python 使用argparse创建相互包含的位置参数,python,argparse,Python,Argparse,我正试图用Python的argparse模块构建一个命令行界面。我想要两个位置参数,其中一个依赖于另一个(相互包含)。以下是我想要的: prog [arg1 [arg2]] 以下是我目前掌握的情况: prog [arg1] [arg2] 由以下机构制作: parser = argparse.ArgumentParser() parser.add_argument('arg1', nargs='?') parser.add_argument('arg2', nargs='?') 如何从那里得

我正试图用Python的argparse模块构建一个命令行界面。我想要两个位置参数,其中一个依赖于另一个(相互包含)。以下是我想要的:

prog [arg1 [arg2]]
以下是我目前掌握的情况:

prog [arg1] [arg2]
由以下机构制作:

parser = argparse.ArgumentParser()
parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')

如何从那里得到一个相互包含的arg2?

您可以使用
子解析器来做类似的事情

以下是文档和示例:


模块
argparse
没有创建互斥参数的选项。 不过,自己写很简单。
首先添加两个参数作为可选参数:

parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')
解析参数后,检查是否设置了
arg1
,是否未设置
arg2

args = parser.parse_args()
if args.arg1 and not args.arg2:
(如果将未使用参数的默认值从
None
更改为其他值,则这可能会更加棘手)

然后使用
parser.error()
函数显示正常
argparse
错误消息:

parser.error('the following arguments are required: arg2')
最后更改用法:显示
arg2
依赖于
arg1
的消息:

parser = argparse.ArgumentParser(usage='%(prog)s [arg1 [arg2]]')
完整的脚本:

import argparse

parser = argparse.ArgumentParser(usage='%(prog)s [arg1 [arg2]]')
parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')

args = parser.parse_args()

if args.arg1 and not args.arg2:
    parser.error('the following arguments are required: arg2')

不幸的是,这不起作用,因为arg1需要是动态的。子命令是固定字符串。例如,prog multiarg arg1 arg2,其中multiarg是固定的命令字符串。此外,即使添加了子命令,最终也会出现相同的情况。