Codex怎么在脚本里输出JSON?exec只读模式、Schema与JSONL区别
通过codex exec读取练习仓库并生成固定字段JSON,区分最终结果、进度日志和事件流,再检…
文章目录
想把Codex的项目摘要交给后续脚本,直接解析普通聊天文字容易受标题、代码围栏和解释段落影响。codex exec支持非交互运行,用Schema要求最终结构,也可输出JSONL事件流。本文用只读练习仓库提取项目名称与语言,说明准备、调用和验收;示例未实际调用模型,不声称结果来自亲测。
第一步:准备仓库与当前登录
官方说明exec默认只读沙箱,并通常要求在Git仓库中运行。先进入你有权处理的练习仓库,确认README和代码存在,使用已配置的CLI认证。不要为了生成一份报告就开放写权限或跳过仓库检查,更不能把认证文件和密钥放进示例、输出日志或公开仓库。
这种调用适合脚本与流水线,不需要打开交互式终端界面。任务先限定只读取文件,不安装、不测试、不改项目。模型服务仍按账号和当前计费方式使用资源,CLI输出格式设置不会使调用变成免费,也不等于已经替你建立了定时任务。
第二步:写最小输出Schema
在练习目录保存schema.json,定义两个必须字段,不允许额外字段。项目名称应来自实际资料,语言则依据源文件与配置;找不到时应按任务要求报告空值或空数组,而不是自动根据目录名猜项目名。本例允许项目名为空字符串,语义缺失要在人工验收时识别。
{
"type": "object",
"properties": {
"project_name": {"type": "string"},
"programming_languages": {
"type": "array",
"items": {"type": "string"}
}
},
"required": ["project_name", "programming_languages"],
"additionalProperties": false
}
第三步:请求固定结构的最终结果
codex exec --sandbox read-only --output-schema ./schema.json -o ./project-metadata.json "只读本练习仓库。依据README提取项目名,依据实际源文件列编程语言。项目名找不到用空字符串,语言找不到用空数组。不安装、不修改、不执行仓库代码。"
官方说明普通exec将进度送到stderr,最终回答写到stdout;-o或–output-last-message把最终消息写入文件,同时仍会打印它。不要把stderr一起合并进结果文件后再当成纯JSON解析。输出路径选练习专用文件,避免覆盖已有正式报告。
第四步:区分JSON与JSONL事件流
–json会把stdout改为逐行事件流,包括thread.started、item事件、turn.completed或失败事件。这是JSON Lines,每行一个对象,不是一个普通JSON文档;适合记录执行过程,而不是直接作为刚才的项目元数据。需要最终结构时看-o生成的文件,不能把整个事件流交给只接受单对象的解析器。
python3 -m json.tool project-metadata.json
这条命令只验证JSON语法并格式化显示,不验证字段内容一定正确,也不完整代替Schema校验。后续程序应检查字段是否存在、类型和允许值,再核对README与源文件。项目里有JSON配置不一定说明它是某种编程语言,空结果也不能默认当作任务成功。
第五步:检查失败与实际副作用
脚本需检查命令退出状态,再决定是否读取或发布结果;旧文件可能在失败后仍留在目录里,应通过本次运行记录辨别,不能只看路径存在。JSONL中的turn.failed或error也应保留用于排查,别忽略后继续把半成品传到下一步。
官方当前说明–full-auto不再支持,不应从旧示例照搬来解决审批问题;需要权限时按当前沙箱和组织策略选择。本例只读提取无需提高权限。最后检查仓库差异,确认没有意外改动,再把已核对JSON交给后续流程。完成标准是调用状态、输出格式和事实依据都正确,而不只是拿到一段看起来像JSON的文本。
首次接入流水线,先只把结果保存在本地,不自动发评论或发布报告。保留本次退出状态、结果文件和经过审阅的诊断日志,确认后再交给下游。这样格式错误或来源缺失不会被后续步骤放大成正式结论。
官方资料
资料核对日期:2026年11月5日。
本文地址:https://www.163264.com/19251

