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

如何在Python脚本中捕获curl命令的JSON输出并存储为对象?

解决方法:捕获curl输出并转为Python对象

嘿,我来帮你搞定这个问题!你现在用subprocess.call()执行curl命令的话,只会拿到命令的退出状态码,输出直接打到终端了,脚本里根本抓不到。要把JSON输出存成Python对象,得换个方式捕获命令的输出,再解析成JSON格式就行。

方法一:使用subprocess.run()(Python 3.5+推荐)

这是Python官方推荐的新方法,功能更灵活,能同时捕获标准输出和错误输出:

import subprocess
import json

# 执行curl命令并捕获输出
result = subprocess.run(
    ['curl', '--digest', '--user', 'user:pass', 'https://url'],
    capture_output=True,  # 捕获stdout和stderr
    text=True  # 让输出以字符串形式返回,默认是字节流
)

# 先检查命令是否执行成功
if result.returncode == 0:
    # 将JSON字符串解析为Python字典/列表对象
    json_data = json.loads(result.stdout)
    # 现在你就可以随意操作json_data这个对象了
    print("解析后的JSON对象:", json_data)
    # 比如取某个字段:json_data["key"]
else:
    # 如果命令执行失败,打印错误信息
    print(f"curl命令执行失败,错误信息:{result.stderr}")

方法二:使用subprocess.check_output()

这个方法会直接返回命令的标准输出,如果命令执行失败(返回非0状态码),会抛出CalledProcessError异常:

import subprocess
import json

try:
    # 捕获curl的输出(字符串形式)
    output = subprocess.check_output(
        ['curl', '--digest', '--user', 'user:pass', 'https://url'],
        text=True
    )
    # 解析为Python对象
    json_data = json.loads(output)
    print("解析后的JSON对象:", json_data)
except subprocess.CalledProcessError as e:
    print(f"curl命令执行出错:{e}")
except json.JSONDecodeError as e:
    print(f"JSON格式解析失败:{e}")

关键说明

  • text=True(或者Python 3.7之前用universal_newlines=True):确保输出是字符串而不是字节流,这样json.loads()可以直接处理,不用手动解码。
  • 异常处理:一定要加上异常捕获,避免因为网络问题、认证失败、JSON格式错误导致脚本崩溃。
  • 解析后的json_data就是Python的字典或列表对象,你可以像操作普通Python数据结构一样使用它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:25