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

如何在Python中通过命令行参数指定变体运行脚本(替代YAML配置)

解决方案

原始场景与需求

你有一个check.yaml配置文件:

{
   "Source" : [foo.c,foo1.c,foo2.c],
   "Test1" : [ ex.c,ex1.c,ex2.x,ex3.c],
   "Test2" : [ ex.c,ex1.c,ex2.c,ex3.c,ex4.c],
   "variant1" : true,
   "varinat2":false
}

当前Test.py脚本依赖YAML内的布尔值生成变体文件,现在需要修改为通过命令行参数(如python Test.py variant1)指定变体,不再依赖YAML中的布尔值配置。

修改后的完整脚本

import yaml
import argparse

# 配置命令行参数规则
parser = argparse.ArgumentParser(description='Generate variant YAML files via command line')
# 添加必填位置参数,限定只能输入variant1或variant2
parser.add_argument('variant', choices=['variant1', 'variant2'], help='Specify variant: variant1 or variant2')
args = parser.parse_args()

# 直接读取目标配置文件(修正原脚本的文件名错误)
with open('check.yaml', 'r') as file:
    yaml_data = yaml.load(file, Loader=yaml.SafeLoader)

# 根据命令行参数执行对应变体逻辑
if args.variant == 'variant1':
    # 执行variant1的专属操作:删除Test2的第4个元素(索引4)
    if 'Test2' in yaml_data and len(yaml_data['Test2']) > 4:
        del yaml_data['Test2'][4]
    # 生成变体文件
    with open('variant1.yaml', 'w') as f:
        yaml.dump(yaml_data, f)
    print(f"Successfully generated {args.variant}.yaml")
elif args.variant == 'variant2':
    # 执行variant2的专属操作(可根据需求修改)
    with open('variant2.yaml', 'w') as f:
        yaml.dump(yaml_data, f)
    print(f"Successfully generated {args.variant}.yaml")
else:
    print("Invalid variant input")

关键修改点说明

  • 命令行参数配置:用argparse限定了输入范围,避免无效参数,同时明确参数用途
  • 修正文件名错误:原脚本读取的hardcode_list.yaml改为实际的check.yaml
  • 移除YAML布尔值依赖:完全基于命令行参数判断要执行的变体逻辑,不再读取YAML中的布尔值
  • 删除冗余操作:去掉原脚本中写入test.yaml再重新读取的无用步骤,直接处理加载的YAML数据
  • 修复逻辑错误:移除原脚本中yaml_data["src_14"]这类不存在的键判断(会触发报错),同时建议你修正YAML中varinat2的拼写错误(改为variant2)

使用方式

在命令行运行对应命令即可生成变体文件:

# 生成variant1配置文件
python Test.py variant1

# 生成variant2配置文件
python Test.py variant2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:15