我有一个脚本,可以合并多个视频和音频文件。现在,我有一个参数,它允许四个值:

# -A FILENAME LANGUAGE POSITION SPEED
$ script.py [... more parameters ...] -A audio.mp3 eng -1 1 [... more parameters ...]


现在,我希望第三个和第四个是可选的。目前,我有两个想法,但也许有更好的解决方案:


如果提供了1个或4个以上的参数,请将nargs设置为+并引发错误。也许type参数可以抓住这一点。问题在于帮助中看不到需要2到4个值。
所有组合都有4个不同的参数。这将允许该职位是可选的。问题是我然后需要四个参数名称。


该参数可能还会出现多次(actionappend)。

最佳答案

我建议让-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/

10-13 09:06