首页 > 解决方案 > 使一组 ArgParse 参数可选

问题描述

我有这样的当前代码:

parser = argparse.ArgumentParser()
parser.add_argument('origin_x', help='X origin', type=float)
parser.add_argument('origin_y', help='Y origin', type=float)
parser.add_argument('origin_z', help='Z origin', type=float)
parser.add_argument('file_name', help='File to use')

当然,我可以这样称呼:

python my_prog.py 0 0 0 foo.txt

但是,我也想这样做:

python my_prog.py foo.txt

但不是这个:

python my_prog.py 0 foo.txt

有没有办法用现有的 API 做到这一点?这个答案显示了如何手动做类似的事情,但是有自动的方法吗?

标签: pythonargparse

解决方案


后处理可能是最好的选择:

parser.add_argument('origin', nargs="*", default=[0., 0., 0.], type=float)
parser.add_argument('file_name', help='File to use')
args = parser.parse_args()
if not len(args.origin) == 3:
    parser.error("you done wrong..")

推荐阅读