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

如何用Python遍历键值对并调用外部脚本传递参数?

理想实现方案:遍历键值对并调用外部Python脚本

一、输入文件格式选哪种?

  • 能改格式的话,优先用JSON,Python原生就支持解析,不用自己写字符串分割逻辑,避免格式不统一踩坑。比如把INPUTLIST.txt改成INPUTLIST.json,要么存成字典:{"KV1":123, "KV2":456},要么存成列表:[{"key":"KV1", "value":123}, {"key":"KV2", "value":456}]
  • 要是必须保留每行键:值的文本格式,也能处理,但得保证每行格式统一(别一会儿冒号前有空格,一会儿没有)

二、核心实现逻辑

用Python的subprocess模块调用main_script.py,这比os.system好用太多——能捕获脚本输出、处理返回码,稳定性拉满。

三、具体代码示例

1. 处理每行键:值格式的文本文件

import subprocess

# 读取文件,跳过空行
with open("INPUTLIST.txt", "r", encoding="utf-8") as f:
    lines = [line.strip() for line in f if line.strip()]

# 逐个处理键值对
for line in lines:
    # 分割键和值,maxsplit=1避免值里有冒号的情况
    key, value = line.split(":", maxsplit=1)
    key = key.strip()
    value = value.strip()
    
    # 调用main_script.py,传两个参数:key和value
    result = subprocess.run(
        ["python", "main_script.py", key, value],
        capture_output=True,
        text=True,
        encoding="utf-8"
    )
    
    # 可选:打印处理结果,方便排查问题
    print(f"处理 {key}:{value} 结束")
    if result.returncode == 0:
        print(f"脚本输出:{result.stdout}")
    else:
        print(f"脚本出错了:{result.stderr}")

2. 处理JSON字典格式(推荐)

假设INPUTLIST.json内容是:

{
    "KV1": "123",
    "KV2": 456,
    "KV3": "abc"
}

代码实现:

import subprocess
import json

# 加载JSON字典
with open("INPUTLIST.json", "r", encoding="utf-8") as f:
    kv_dict = json.load(f)

# 遍历键值对
for key, value in kv_dict.items():
    # 把值转成字符串,因为subprocess参数必须是字符串
    value_str = str(value)
    # 调用脚本
    result = subprocess.run(
        ["python", "main_script.py", key, value_str],
        capture_output=True,
        text=True,
        encoding="utf-8"
    )
    
    # 处理结果
    print(f"处理 {key}:{value} 结束")
    if result.returncode != 0:
        print(f"错误信息:{result.stderr}")

3. 处理JSON列表格式

如果INPUTLIST.json是列表结构:

[
    {"key": "KV1", "value": 123},
    {"key": "KV2", "value": "456"}
]

代码:

import subprocess
import json

with open("INPUTLIST.json", "r", encoding="utf-8") as f:
    kv_list = json.load(f)

for item in kv_list:
    key = item["key"]
    value_str = str(item["value"])
    result = subprocess.run(
        ["python", "main_script.py", key, value_str],
        capture_output=True,
        text=True,
        encoding="utf-8"
    )
    
    print(f"处理 {key}:{item['value']} 结束")

四、几个要注意的点

  • 得确保main_script.py能正确接收命令行参数,比如用sys.argv获取:
    # main_script.py示例代码
    import sys
    if __name__ == "__main__":
        if len(sys.argv) != 3:
            print("请传入两个参数:key 和 value")
            sys.exit(1)
        key = sys.argv[1]
        value = sys.argv[2]
        # 这里写你的业务逻辑
        print(f"收到参数:key={key}, value={value}")
    
  • 如果main_script.py不在当前文件夹,要写全路径,比如"/home/user/scripts/main_script.py"
  • 要是想提速,可以用多线程/多进程并行处理,但得确认你的脚本支持并行,别搞出资源冲突
  • 遇到键或值带空格、引号的情况,subprocess.run会自动转义,不用手动加引号,比直接拼命令字符串安全多了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:13:35