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

