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

如何用argparse向CLI参数传递等号并指定多值参数?

解决argparse中--param=后跟空格分隔多值的问题

argparse默认解析逻辑下,--repos=这种形式会被识别为参数--repos的取值为空字符串,后面的repo1 repo2 repo3会被当作未定义的位置参数,因此抛出"unrecognized arguments"错误。要实现需求,有两种可行方案:

方案一:预处理命令行参数

直接修改传入argparse的参数列表,把--repos=替换为--repos,让argparse用标准的nargs='+'捕获后续多值:

import argparse
import sys

# 预处理参数,将--repos=替换为--repos
processed_args = []
for arg in sys.argv[1:]:
    if arg == "--repos=":
        processed_args.append("--repos")
    else:
        processed_args.append(arg)

# 初始化解析器
parser = argparse.ArgumentParser()
parser.add_argument("--repos", nargs="+", default=[], help="指定多个仓库名")
args = parser.parse_args(processed_args)

print(args.repos)  # 执行`python script.py --repos= repo1 repo2 repo3`会输出 ['repo1', 'repo2', 'repo3']

这种方法简单直接,适合只需要处理少数几个类似参数的场景。

方案二:自定义参数Action

如果需要更灵活的处理(比如多个参数都要支持这种语法),可以自定义argparse的Action类,主动捕获后续参数:

import argparse

class EqualSignMultiValueAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        # 如果等号后无值(即values为空列表),则从剩余参数中收集直到遇到下一个--开头的参数
        if not values:
            remaining_args = parser._get_args()
            collected_values = []
            while remaining_args:
                current_arg = remaining_args[0]
                if current_arg.startswith("--"):
                    break
                collected_values.append(current_arg)
                remaining_args.pop(0)
            # 更新解析器的剩余参数列表
            parser._set_args(remaining_args)
            setattr(namespace, self.dest, collected_values)
        else:
            # 处理--repos=repo1这种带单个值的情况
            setattr(namespace, self.dest, values)

# 初始化解析器并使用自定义Action
parser = argparse.ArgumentParser()
parser.add_argument("--repos", action=EqualSignMultiValueAction, nargs="*", default=[], help="指定多个仓库名")
args = parser.parse_args()

print(args.repos)  # 同样支持`--repos= repo1 repo2 repo3`的调用方式

自定义Action的优势在于扩展性强,能统一处理多个参数的类似需求,也可以根据需要调整参数捕获的规则(比如支持混合--repos=repo1 repo2这种写法)。

内容的提问来源于stack exchange,提问作者Vanias Kopas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:39:34