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

如何使用argparse通过等号传递列表类型命令行参数

argparse 带前导短横线的多值列表参数=传参实现

官方基础列表传参用法

argparse原生支持通过nargs="+"配置接收多值列表参数,基础写法如下:

parser = argparse.ArgumentParser()
parser.add_argument("--list", nargs="+", default=["a", "b"])
value = parser.parse_args()

Shell环境下通过空格分隔参数值即可传参,执行命令python3 example.py --list a b c,可得到解析结果['a', 'b', 'c']。

带前导短横线的参数传参限制

如果列表元素本身带有前导短横线,直接用空格分隔传参会被argparse误识别为独立选项。此时用=连接参数名和单个参数值可以避免识别错误,执行python3 example.py --list=-a可正常得到解析结果['-a']。
但原生nargs="+"配置不支持通过=语法传入多个值,无法实现执行python3 example.py --list=-a,-b时得到['-a','-b']的解析效果。

具体实现方案

通过自定义参数类型转换逻辑,即可支持=连接逗号分隔多值的传参方式,同时兼容带前导短横线的参数值。

仅支持=连接逗号分隔传参的最简实现

import argparse

def split_comma_list(input_str):
    return [item.strip() for item in input_str.split(',') if item.strip()]

parser = argparse.ArgumentParser()
parser.add_argument("--list", type=split_comma_list, default=["a", "b"])
args = parser.parse_args()

执行python3 example.py --list=-a,-b,即可得到预期解析结果['-a', '-b']。

兼容原生空格分隔传参的扩展实现

如果需要同时保留原生空格分隔多值的传参能力,可追加nargs="+"配置,调整转换逻辑兼容两种传参格式:

import argparse

def split_comma_list(input_val):
    item_list = []
    # 兼容nargs传入的多值列表、单值字符串两种输入格式
    if not isinstance(input_val, list):
        input_val = [input_val]
    for val in input_val:
        item_list.extend([item.strip() for item in val.split(',') if item.strip()])
    return item_list

parser = argparse.ArgumentParser()
parser.add_argument("--list", type=split_comma_list, nargs="+", default=["a", "b"])
args = parser.parse_args()

该写法支持三种传参格式:

  • 原生空格分隔:执行python3 example.py --list a b c,解析结果为['a', 'b', 'c']
  • =连接逗号分隔带短横线参数:执行python3 example.py --list=-a,-b,解析结果为['-a', '-b']
  • 混合格式传参:执行python3 example.py --list x,-y z,解析结果为['x', '-y', 'z']

内容的提问来源于stack exchange,提问作者Gunner Stone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:31:06