Python argparse如何为单个flag配置可选数量的入参
Python argparse 实现--bin参数接收1~2个入参的修改方案
问题原因
你当前配置的nargs=2强制要求--bin必须传递2个参数,所以仅传1个文件路径时会触发参数数量不匹配的报错。
修改步骤
- 调整参数定义,将
nargs改为'+'表示接收1个及以上的入参,同时补充参数说明:
# 提前定义address的默认值,可根据需求修改 DEFAULT_BIN_ADDR = "0x08000000" cmdParser.add_argument( '--bin', action='store', nargs='+', required=True, metavar=('file', 'address'), help=f'固件bin文件路径,可选烧录地址,默认值为{DEFAULT_BIN_ADDR}' )
- 参数解析后自行处理长度逻辑,同时可增加参数数量校验避免传入过多参数:
args = cmdParser.parse_args() # 校验参数数量不超过2 if len(args.bin) > 2: cmdParser.error('--bin 最多仅支持传入2个参数:[bin文件路径] [可选烧录地址]') bin_path = args.bin[0] burn_addr = args.bin[1] if len(args.bin) == 2 else DEFAULT_BIN_ADDR
修改后即可支持两种调用形式:
- 仅传文件:
dfuMaker.py --bin firmware.bin,自动使用默认地址 - 传文件+地址:
dfuMaker.py --bin firmware.bin 0x08010000,使用传入的地址
内容的提问来源于stack exchange,提问作者Noam Yulzari
相关产品推荐
相关产品推荐

