我正在尝试使用Python的argparse模块构建命令行界面。我想要两个位置参数,其中一个取决于另一个(相互包容)。这就是我想要的:
prog [arg1 [arg2]]
这是我到目前为止所拥有的:
prog [arg1] [arg2]
由以下人员制作:
parser = argparse.ArgumentParser()
parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')
我如何从那里获得相互包容的arg2?
答案 0 :(得分:0)
答案 1 :(得分:0)
模块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')