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

如何用Python执行Shell命令并保存输出到变量以解析结构化数据

Python执行终端命令并解析JSON输出的通用流程

通用处理步骤

  1. 配置subprocess参数捕获输出
    默认subprocess.run()仅返回命令返回码,要捕获输出需指定stdout=subprocess.PIPE;若需处理错误输出,可追加stderr=subprocess.PIPE;同时指定encoding='utf-8',直接得到字符串而非字节串,避免额外的解码操作。

  2. 执行命令并提取输出
    调用subprocess.run()后,通过返回对象的.stdout属性获取命令的标准输出内容;若命令执行失败,可通过.stderr查看错误信息。

  3. 解析JSON为Python字典
    使用json.loads()将捕获到的JSON格式字符串转换为Python字典,这样就能像操作普通字典一样提取字段。

  4. 提取目标字段
    从解析后的字典中,直接通过键名(如region、city)取出对应值;推荐用.get()方法,避免键不存在时抛出异常。

代码示例

以调用curl ipinfo.io获取IP地理信息为例:

import subprocess
import json

# 执行curl命令,捕获输出
result = subprocess.run(
    ['curl', 'ipinfo.io'],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    encoding='utf-8'
)

# 处理命令执行结果
if result.returncode == 0:
    try:
        # 解析JSON输出为字典
        output_dict = json.loads(result.stdout)
        # 提取目标字段
        region = output_dict.get('region')
        city = output_dict.get('city')
        print(f"地区: {region}, 城市: {city}")
    except json.JSONDecodeError as e:
        print(f"JSON解析失败: {str(e)}")
else:
    print(f"命令执行失败,错误信息: {result.stderr}")

关键注意事项

  • 若curl命令需要额外参数(如请求头、POST数据),直接将参数按顺序放入列表,比如['curl', '-H', 'Content-Type: application/json', '-d', '{"key":"val"}', 'https://example.com']。
  • 尽量避免使用shell=True,防止命令注入风险;如果必须依赖shell执行(比如需要管道、通配符),务必确保输入内容是完全可信的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:33:22