将可选数量的参数传递给标志 Python argparse

Passing optional number of arguments to a flag Python argparse

我希望能够向我的 python 脚本传递 1 或 2 个参数,这样我就可以这样调用它:

dfuMaker.py --bin {file} {address}

如果不传地址可以有默认值。

目前,这就是我定义论点的方式。

cmdParser.add_argument(
    '--bin', action='store', nargs=2, required=True)

当然,当尝试仅传递 1 个参数时,它会失败并显示错误:

DFUMaker: error: argument --bin: expected 2 arguments

我会使用自定义类型。

def file_address_pair(s):
    x = s.split(",", 1)
    if len(x) == 1:
        x.append(DEFAULT_ADDRESS)
    return x


p.add_argument("--bin", type=file_address_pair)

尽管名称不同,type 参数可以是任何接受 str 和 returns 值的可调用对象;它不一定是实际的 Python 类型。

那么你可以使用

dfuMaker.py --bin f
dfuMaker.py --bin f,addr