
如何解析 Gemini CLI 无头模式 -p 的 JSON 输出与退出码【免费下载链接】gemini-cliAn open-source AI agent that brings the power of Gemini directly into your terminal.项目地址: https://gitcode.com/GitHub_Trending/gemi/gemini-cli把 Gemini CLI 的模型回答接入脚本、CI 任务或其他工具时直接读取文本输出很难做可靠判断。无头模式headless mode解决的就是这个问题用-p发起一次查询通过--output-format json得到结构化的单个 JSON 对象再用标准 shell 退出码判断本次执行是成功、失败还是参数有误。本文覆盖从触发无头模式、解析 JSON 字段到检查退出码的完整路径前提是你已经安装并完成了 Gemini CLI 的认证参见 无头模式教程的前置条件。触发无头模式并选择 JSON 输出无头模式在两种情况下被触发CLI 运行在非 TTY 环境或者命令行中带-p--prompt标志。-p会绕过交互界面把结果打印到 stdout 并立即退出gemini -p Write a poem about TypeScript--output-format标志别名-o控制输出格式默认值是text可选值为text、json、stream-json。要拿到可直接被jq等工具处理的纯 JSON需要显式指定jsongemini --output-format json -p Return a raw JSON object with keys version and deps from package.json完整标志列表见 CLI 参考JSON 结构细节见 Headless 模式参考。JSON 输出包含哪些字段--output-format json返回一个 JSON 对象包含模型响应和用量统计字段结构如下字段类型含义responsestring模型的最终回答[stats]objectToken 用量与 API 延迟指标errorobject可选请求失败时的错误详情[stats]: 文档原文写作stats。脚本中最常用的是response字段它承载模型的回答正文。error只在请求失败时出现可以在脚本里用它的存在与否作为失败信号之一。用 jq 解析 response 字段macOS/Linux自动化教程给出的标准做法是--output-format json的输出管道给jq用-r取出.response字段并写入文件。下面是文档中的完整示例脚本保存为generate_json.sh#!/bin/bash # Ensure we are in a project root if [ ! -f package.json ]; then echo Error: package.json not found. exit 1 fi # Extract data gemini --output-format json Return a raw JSON object with keys version and deps from package.json | jq -r .response data.json注意这条命令的两个前置条件一是它假定当前目录存在package.json脚本开头会检查并exit 1二是jq需要已安装。chmod x generate_json.sh后运行./generate_json.sh再打开data.json核对内容。文档给出的示例文件内容如下仅作为文档示例展示字段形态实际运行得到的值会因你的package.json不同而变化{ version: 1.0.0, deps: { react: ^18.2.0 } }WindowsPowerShell替代路径PowerShell 下可以不依赖jq用ConvertFrom-Json解析同一个 JSON 对象$output gemini --output-format json Return a raw JSON object with keys version and deps from package.json | ConvertFrom-Json $output.response | Out-File -FilePath data.json -Encoding utf8两种平台最终都是取出 JSON 对象的response字段区别只在于解析工具。检查退出码判断执行结果无头执行结束时CLI 返回固定的退出码来表示结果。脚本中可以用 shell 标准的退出码变量如 Bash 的$?捕获它再按下表分支退出码含义0成功1一般错误或 API 失败42输入错误prompt 或参数无效53超过轮次上限退出码和 JSON 里的error字段是两个互补的判断来源error携带具体错误详情退出码则让脚本能直接决定后续流程是否继续。例如退出码为42说明问题出在你传给 CLI 的 prompt 或参数上而不是 API 侧为1时则应同时查看 JSON 中的error对象定位原因。可选分支stream-json 流式事件如果脚本需要实时观察执行过程比如 CI 中边跑边输出进度可以把--output-format设为stream-json。它输出换行分隔的 JSONJSONL事件流每行一个事件事件类型包括init会话元数据session ID、模型message用户与助手消息块tool_use带参数的工具调用请求tool_result已执行工具的输出error非致命警告与系统错误result最终结果含聚合统计和按模型划分的 Token 用量与json的单个对象不同stream-json下最后一行的result事件才携带最终结果与统计需要逐行解析。对跑完一次拿结果的场景json更简单优先选它。限制与下一步-p是强制无头执行的方式不带该标志的位置参数在 TTY 下默认进入交互模式除非输入或输出被管道/重定向。JSON 模式只对非交互模式生效stats记录的是本次执行的 Token 用量与 API 延迟指标不要把示例中的数值当成固定预期。退出码53对应轮次上限被触发说明任务在达到最大轮次前未完成需要调整 prompt 或任务规模这属于任务本身的问题而非解析问题。进一步阅读Headless 模式参考 与 自动化教程 中还包含管道输入、批量生成脚本和自定义命令别名如gcommit包装git commit的完整示例都可以在本文的 JSON 解析与退出码判断基础上直接套用。【免费下载链接】gemini-cliAn open-source AI agent that brings the power of Gemini directly into your terminal.项目地址: https://gitcode.com/GitHub_Trending/gemi/gemini-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考