我有一个脚本,可以合并多个视频和音频文件。现在,我有一个参数,它允许四个值:
# -A FILENAME LANGUAGE POSITION SPEED
$ script.py [... more parameters ...] -A audio.mp3 eng -1 1 [... more parameters ...]
现在,我希望第三个和第四个是可选的。目前,我有两个想法,但也许有更好的解决方案:
如果提供了1个或4个以上的参数,请将
nargs
设置为+
并引发错误。也许type
参数可以抓住这一点。问题在于帮助中看不到需要2到4个值。所有组合都有4个不同的参数。这将允许该职位是可选的。问题是我然后需要四个参数名称。
该参数可能还会出现多次(
action
为append
)。 最佳答案
我建议让-A
接受一个逗号分隔的单个字符串(或使用您选择的定界符),并为帮助消息提供一个自定义metavar。
def av_file_type(str):
data = tuple(str.split(","))
n = len(data)
if n < 2:
raise ArgumentError("Too few arguments")
elif n == 2:
return data + (default_position, default_speed)
elif n == 3:
return data + (default_speed,)
elif n == 4:
return data
else:
return ArgumentError("Too many arguments")
p.add_argument("-A", action='append', type=av_file_type,
metavar='filename,language[,position[,speed]]')
使用
nargs='+'
时,以您喜欢的方式格式化帮助字符串非常简单。关于python - argparse中nargs的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23172172/