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

在Jupyter Notebook中执行jq命令查找JSON的status:failed报错求助

问题解决方法

你的代码主要存在以下几个问题:

  • 使用subprocess.check_output并设置shell=True时,命令需传入单个字符串,而非列表(列表格式是shell=False时的用法,混用会触发语法错误)。
  • 命令里的&&是HTML转义字符,实际应替换为&&;同时引号嵌套混乱,导致shell解析失败。
  • 路径缺少根目录前缀,正确路径应为/Users/avinash/Downloads/reports/reports

修正后的代码(保留原命令逻辑)

import subprocess

# 将整个命令作为单个字符串,用单引号包裹外层避免引号冲突
cmd = '''cd /Users/avinash/Downloads/reports/reports && jq -r '.' *.json | jq '(.steps) |= []' | grep -c '"status": "failed"' '''
# 添加text=True让结果直接返回字符串,无需手动解码
result = subprocess.check_output(cmd, shell=True, text=True)
print(f"匹配到的失败条目数:{result.strip()}")

更高效的优化方案(用jq直接统计,无需grep)

可以让jq完成过滤和计数操作,减少管道依赖,同时避免引号嵌套问题:

import subprocess

cmd = '''cd /Users/avinash/Downloads/reports/reports && jq -n '[inputs | del(.steps) | select(.status == "failed")] | length' *.json '''
result = subprocess.check_output(cmd, shell=True, text=True)
print(f"匹配到的失败条目数:{result.strip()}")

说明:

  • inputs:jq处理多个输入文件的内容
  • del(.steps):移除steps字段,和原命令的(.steps) |= []效果一致
  • select(.status == "failed"):筛选status为failed的条目
  • [... ] | length:将符合条件的条目存入数组后统计长度,直接得到总数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44