在非交互模式(-p 或 --print)下,Claude Code 支持多种输出格式,
满足脚本集成、CI/CD 管道和实时显示的不同需求。
三种输出格式
通过 --output-format 参数指定:
| 格式 | 参数值 | 适合场景 |
|---|---|---|
| 纯文本 | text(默认) | 人类阅读、简单脚本 |
| JSON 对象 | json | 程序解析、CI/CD |
| 流式 JSON | stream-json | 实时显示、长任务 |
text 格式(默认)
bash
# 最简单,直接输出 Claude 的文字回复
claude -p "列出 Python 列表去重的 3 种方法"
# 输出:
# 1. 使用 set():list(set(lst))
# 2. 使用 dict.fromkeys():list(dict.fromkeys(lst))
# 3. 使用列表推导:[x for i, x in enumerate(lst) if x not in lst[:i]]json 格式(程序集成推荐)
bash
claude -p "分析这段代码有什么问题" --output-format json输出示例:
json
{
"type": "result",
"subtype": "success",
"session_id": "session_abc123",
"cost_usd": 0.00234,
"duration_ms": 2341,
"num_turns": 1,
"result": "分析结果:该代码存在以下问题...",
"is_error": false
}在脚本中解析:
bash
# 提取 result 字段
RESULT=$(claude -p "分析代码" --output-format json | python3 -c "
import json, sys
data = json.load(sys.stdin)
print(data['result'])
")
echo "$RESULT"python
import subprocess, json
output = subprocess.run(
["claude", "-p", "分析这段代码", "--output-format", "json"],
capture_output=True, text=True
)
data = json.loads(output.stdout)
print(data["result"])
print(f"耗时:{data['duration_ms']}ms,成本:${data['cost_usd']:.4f}")stream-json 格式(实时流式)
适合长任务,边生成边处理:
bash
claude -p "写一篇 2000 字的技术文章" --output-format stream-json --include-partial-messages流式事件示例:
json
{"type": "system", "subtype": "init", "session_id": "xxx", ...}
{"type": "assistant", "message": {"role": "assistant", "content": [{"type": "text", "text": "# 文章标题
第一段..."}]}, "turn_number": 1}
{"type": "result", "subtype": "success", "cost_usd": 0.05, ...}Python 处理流式输出:
python
import subprocess, json
process = subprocess.Popen(
["claude", "-p", "写一篇长文", "--output-format", "stream-json",
"--include-partial-messages"],
stdout=subprocess.PIPE, text=True
)
for line in process.stdout:
line = line.strip()
if not line:
continue
event = json.loads(line)
if event["type"] == "assistant":
# 实时打印流式内容
for block in event["message"]["content"]:
if block["type"] == "text":
print(block["text"], end="", flush=True)
elif event["type"] == "result":
print(f"
成本:${event['cost_usd']:.4f}")结构化 JSON 输出(--json-schema)
让 Claude 严格按照指定 Schema 输出:
bash
claude -p "分析这段 Python 代码的问题" --output-format json --json-schema '{
"type": "object",
"properties": {
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {"type": "string", "enum": ["critical", "major", "minor"]},
"line": {"type": "integer"},
"description": {"type": "string"},
"suggestion": {"type": "string"}
}
}
},
"overall_score": {"type": "integer", "minimum": 0, "maximum": 100}
}
}'输出将严格符合 Schema:
json
{
"issues": [
{
"severity": "major",
"line": 15,
"description": "未处理异常可能导致程序崩溃",
"suggestion": "添加 try-except 块"
}
],
"overall_score": 72
}CI/CD 管道集成示例
yaml
# .github/workflows/code-review.yml
- name: AI Code Review
run: |
REVIEW=$(claude -p "对以下改动做代码审查,输出 JSON" --output-format json --json-schema '{"type":"object","properties":{"approved":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}}' < git_diff.txt)
APPROVED=$(echo "$REVIEW" | python3 -c "import json,sys; print(json.load(sys.stdin)['result'])" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('approved','false'))")
if [ "$APPROVED" = "false" ]; then
echo "AI 审查未通过"
exit 1
fiinput-format:接收流式 JSON 输入
配合其他工具的流式输出:
bash
# 接收流式 JSON 输入,输出 JSON
some-tool --output stream-json | claude -p "总结以上内容" --input-format stream-json --output-format json来源:Claude Code 官方文档 - docs.anthropic.com/en/docs/claude-code/cli-reference