如何在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
相关产品推荐
相关产品推荐

