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

如何使用Python的argparse解析嵌套式build_config参数?

实现支持多组--build_config的命令行参数解析

问题分析

需要支持重复使用--build_config选项,每个选项后跟随键值对参数,其中flavors可以接收多个值,其他参数为单值。argparse默认的参数处理无法直接满足这种嵌套+多值的需求,需要额外的解析逻辑。

解决方案代码

import argparse

def parse_build_configs(config_groups):
    parsed_configs = []
    for group in config_groups:
        config = {}
        current_key = None
        for item in group:
            if '=' in item:
                # 处理键值对
                key, value = item.split('=', 1)
                current_key = key
                config[key] = value
            else:
                # 处理多值参数(仅flavors)
                if current_key != 'flavors':
                    raise ValueError(f"Unexpected value '{item}' for non-multi-value key '{current_key}'")
                # 将值转为列表或追加到现有列表
                if isinstance(config[current_key], list):
                    config[current_key].append(item)
                else:
                    config[current_key] = [config[current_key], item]
        parsed_configs.append(config)
    return parsed_configs

# 初始化argparse解析器
parser = argparse.ArgumentParser(description="Parse multi-group build configurations")
parser.add_argument('--build_config', nargs='+', action='append', required=True,
                    help="Build configuration group, e.g. target=product1 flavors=A B C")

# 解析命令行参数
args = parser.parse_args()

# 处理并转换build_config参数
build_configs = parse_build_configs(args.build_config)

# 验证结果(示例)
for idx, cfg in enumerate(build_configs, 1):
    print(f"=== Build Config {idx} ===")
    for key, val in cfg.items():
        print(f"{key}: {val}")

代码说明

  1. argparse配置:

    • 使用action='append'让--build_config可以重复使用,每次的参数被收集为一个子列表
    • 使用nargs='+'让每个--build_config后可以接收多个参数(键值对或多值)
  2. 自定义解析逻辑:

    • 遍历每个--build_config组的参数,区分带=的键值对和后续的多值
    • 仅允许flavors接收多值,其他参数出现多值会抛出错误(可根据需求调整)
    • 将flavors的多个值整理为列表,其他参数保持单值

测试示例

测试命令1

python3 some_script.py --build_config target=product1 step=x rom=y flavors=A B C

输出1

=== Build Config 1 ===
target: product1
step: x
rom: y
flavors: ['A', 'B', 'C']

测试命令2

python3 some_script.py --build_config target=product1 flavors=A --build_config target=product2 flavors=B C

输出2

=== Build Config 1 ===
target: product1
flavors: ['A']
=== Build Config 2 ===
target: product2
flavors: ['B', 'C']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:13:08