You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Argparse含位置参数时,如何通过可选参数传递多个值?

解决argparse可选参数与位置参数冲突的问题

不需要自定义解析器,argparse本身提供了多种内置方案来解决这个问题:

方案1:用--分隔可选参数和位置参数

argparse支持用--作为分隔符,明确告知解析器:--之后的所有内容都属于位置参数,不会被当作可选参数的取值。执行命令时这样写:

python3 myFunc.py -p 80 8080 -- 10.0.0.1

此时80和8080会被正确识别为ports的参数,10.0.0.1则是位置参数host。

方案2:调整参数定义顺序,将位置参数放在前面

把位置参数host的定义放在可选参数之前:

parser.add_argument('host')
parser.add_argument('-p', '--ports', nargs='+', type=int)

之后按如下方式执行命令即可:

python3 myFunc.py 10.0.0.1 -p 80 8080

这种方式符合大多数命令行工具的使用习惯,用户更容易理解和操作。

方案3:自定义类型解析逗号分隔的端口值

如果需要保留-p=的传参形式,可以自定义类型来处理逗号分隔的多个值:

def parse_ports(s):
    return list(map(int, s.split(',')))

parser.add_argument('-p', '--ports', type=parse_ports)

执行命令时用逗号分隔端口:

python3 myFunc.py -p=80,8080 10.0.0.1

这种方式能让argparse正确解析-p=后的多个端口值。


内容的提问来源于stack exchange,提问作者Sebastian Dine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:02:44