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

如何用Python解析JSON、调用Googler并通过subprocess.run读取终端输出

完整实现方案:用subprocess调用Googler并保存CSV输出

我来帮你完善这段代码,实现从JSON取数、调用Googler、保存CSV输出同时在终端显示的需求。下面是完整的可运行代码,之后我会拆解每个部分的作用:

import json
import subprocess

# 1. 解析JSON文件,提取搜索关键词
with open("test.json") as json_file:
    json_data = json.load(json_file)

# 添加异常处理,避免键不存在导致崩溃
try:
    search_term = json_data["search_term1"]["apparel"]["biba"]
except KeyError as e:
    print(f"JSON中缺少指定的键:{e}")
    exit(1)

# 2. 构建Googler命令(列表形式传递参数,避免shell注入风险)
googler_cmd = [
    "googler",
    "-N",          # 指定输出CSV格式
    "-t", "d1",    # 限定搜索过去1天的内容
    search_term    # 从JSON提取的目标搜索词
]

# 3. 执行命令并捕获所有输出
result = subprocess.run(
    googler_cmd,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,  # 合并错误输出到标准输出
    text=True,                 # 直接返回字符串而非字节数据
    check=False                # 不自动抛出异常,手动处理执行状态
)

# 4. 在终端打印输出(模拟直接运行命令的效果)
print(result.stdout)

# 5. 将输出保存到CSV文件
output_filename = "googler_search_results.csv"
with open(output_filename, "w", encoding="utf-8") as output_file:
    output_file.write(result.stdout)

print(f"\n搜索结果已成功保存到:{output_filename}")

# 可选:检查命令执行状态,提示可能的错误
if result.returncode != 0:
    print(f"⚠️ 警告:Googler命令执行返回非零状态码:{result.returncode}")

关键部分说明:

  • 健壮的JSON解析:加入try-except块处理KeyError,避免因JSON结构变动或缺失键导致程序直接崩溃,提升代码稳定性。
  • 安全的命令参数传递:用列表形式构建命令,而非字符串拼接,彻底避免shell注入风险(比如搜索词含空格、引号等特殊字符时,字符串拼接会引发命令执行错误)。
  • 输出捕获与双端处理:通过stdout=subprocess.PIPE捕获命令的所有输出,既可以打印到终端,又能写入CSV文件,同时合并错误输出到标准输出,方便统一排查问题。
  • 格式兼容性:利用Googler的-N参数直接输出CSV格式,无需额外转换,后续可以直接用pandas等工具处理该文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:58