Codex CLI-08-非交互模式-自动化你的开发工作流
·
目录
🚀 Codex CLI 非交互模式:自动化你的开发工作流
📅 更新于 2026年5月 | ✍️ 原创文章,转载请注明出处
本系列共12篇,本文是第8篇
1. 什么是非交互模式
📖 定义
非交互模式 是指 Codex CLI 在没有用户交互的情况下执行任务的模式。
与交互模式的区别:
| 特性 | 交互模式 | 非交互模式 |
|---|---|---|
| 启动 | codex |
codex "任务" |
| 输入 | 实时输入 | 预定义任务 |
| 输出 | 实时显示 | 重定向到文件/管道 |
| 审批 | 手动批准 | 自动批准/跳过 |
| 场景 | 人工开发 | 自动化脚本 |
💡 工作原理
# 交互模式
codex
> 任务描述
[等待用户输入]
[显示结果]
[等待下一步]
# 非交互模式
codex "任务描述"
[执行任务]
[输出结果]
[退出]
🎯 使用场景
- CI/CD 流水线
- 自动化脚本
- 批量处理
- 定时任务
- 代码生成
- 文档生成
2. 为什么使用非交互模式
🎯 核心价值
| 手动操作 | 非交互模式 |
|---|---|
| 每次都要输入 | 一行命令搞定 |
| 容易出错 | 稳定可靠 |
| 无法批量 | 批量处理 |
| 无法定时 | 定时执行 |
| 无法集成 | CI/CD 集成 |
📊 效率对比
| 任务 | 手动操作 | 非交互模式 | 提升 |
|---|---|---|---|
| 代码审查 | 10 分钟 | 1 分钟 | 10x |
| 测试生成 | 30 分钟 | 3 分钟 | 10x |
| 文档生成 | 1 小时 | 5 分钟 | 12x |
| 批量重构 | 4 小时 | 20 分钟 | 12x |
✅ 什么时候用
- 自动化 CI/CD 流程
- 批量处理多个文件
- 定时执行任务
- 集成到脚本
- 生成报告
❌ 什么时候不用
- 需要人工判断的任务
- 需要实时交互的任务
- 探索性的实验
3. 基本用法
🚀 直接执行任务
# 最简单的非交互模式
codex "创建一个 Hello World 的 Python 脚本"
# 指定输出
codex "生成 API 文档" > docs/api.md
# 指定模型
codex -m gpt-4o-mini "格式化这段代码"
📋 常用参数
| 参数 | 说明 | 示例 |
|---|---|---|
-q / --quiet |
静默模式 | codex -q "任务" |
--approval-mode |
审批模式 | codex --approval-mode full-auto "任务" |
-m / --model |
指定模型 | codex -m gpt-4o-mini "任务" |
-d / --dir |
指定目录 | codex -d ./project "任务" |
--no-color |
禁用颜色 | codex --no-color "任务" |
💡 常用组合
# 静默模式 + 自动批准
codex -q --approval-mode full-auto "运行测试"
# 指定模型 + 输出到文件
codex -m gpt-4o-mini "生成文档" > docs/api.md
# 指定目录 + 静默模式
codex -d ./src -q "检查代码风格"
📝 示例
1. 代码生成
# 生成 Python 脚本
codex "创建一个 HTTP 服务器,监听 8080 端口" > server.py
# 生成配置文件
codex "生成 Docker Compose 配置,包含 nginx + postgres + redis" > docker-compose.yml
# 生成测试文件
codex "为 src/user_service.py 生成 pytest 测试" > tests/test_user_service.py
2. 代码分析
# 分析代码质量
codex -q "分析 src/ 目录的代码质量,输出评分和建议" > report.txt
# 查找潜在问题
codex -q "检查 src/ 目录的安全漏洞" > security_report.txt
# 生成文档
codex -q "为 src/api/ 目录生成 API 文档" > docs/api.md
3. 代码修改
# 重构代码
codex --approval-mode full-auto "将 src/legacy/ 目录的代码重构为新架构"
# 格式化代码
codex --approval-mode full-auto "格式化 src/ 目录的 Python 代码"
# 修复问题
codex --approval-mode full-auto "修复 src/ 目录的 lint 错误"
4. 输出控制
📤 标准输出
# 输出到终端(默认)
codex "生成文档"
# 输出到文件
codex "生成文档" > docs/api.md
# 追加到文件
codex "添加新内容" >> docs/api.md
📥 标准输入
# 从文件读取任务
codex < tasks.txt
# 从管道读取
echo "生成文档" | codex
# 使用 Here Document
codex << 'EOF'
请帮我:
1. 创建数据库迁移文件
2. 添加索引
3. 生成回滚脚本
EOF
🔀 管道操作
# 与其他命令结合
codex -q "列出所有 TODO" | grep -i "fix"
# 传递给其他工具
codex "分析代码" | tee report.txt
# 处理多个任务
cat tasks.txt | while read task; do
codex -q "$task" > "output_$task.txt"
done
📊 日志控制
# 详细日志
codex --verbose "任务" 2> error.log
# 静默模式
codex -q "任务"
# 只输出结果
codex -q --no-color "任务" | tail -1
5. 脚本集成
🐚 Bash 脚本
#!/bin/bash
# 自动化脚本示例
set -e
# 变量定义
PROJECT_DIR="./my-project"
REPORT_FILE="report.txt"
# 代码审查
echo "开始代码审查..."
codex -q "审查 $PROJECT_DIR 的代码质量" > "$REPORT_FILE"
# 检查结果
if grep -q "严重问题" "$REPORT_FILE"; then
echo "发现严重问题,请查看 $REPORT_FILE"
exit 1
fi
# 运行测试
echo "运行测试..."
codex -q --approval-mode full-auto "运行 $PROJECT_DIR 的测试"
# 生成文档
echo "生成文档..."
codex -q "为 $PROJECT_DIR 生成 API 文档" > docs/api.md
echo "完成!"
🐍 Python 脚本
#!/usr/bin/env python3
import subprocess
import sys
def run_codex(task: str, quiet: bool = True) -> str:
"""运行 Codex CLI 任务"""
cmd = ["codex"]
if quiet:
cmd.append("-q")
cmd.append(task)
result = subprocess.run(
cmd,
capture_output=True,
text=True,
check=True
)
return result.stdout
def main():
# 代码审查
print("开始代码审查...")
report = run_codex("审查 src/ 目录的代码质量")
# 检查结果
if "严重问题" in report:
print("发现严重问题!")
print(report)
sys.exit(1)
# 生成测试
print("生成测试...")
tests = run_codex("为 src/ 目录生成单元测试")
with open("tests/test_generated.py", "w") as f:
f.write(tests)
print("完成!")
if __name__ == "__main__":
main()
📜 Shell 函数
# 添加到 ~/.bashrc 或 ~/.zshrc
# 快速代码审查
codex-review() {
codex -q "审查 $1 的代码质量" | tee review_$(date +%Y%m%d).txt
}
# 快速生成测试
codex-test() {
codex -q "为 $1 生成单元测试" > "test_$(basename $1)"
}
# 快速生成文档
codex-doc() {
codex -q "为 $1 生成 API 文档" > "docs/$(basename $1 .py).md"
}
# 批量处理
codex-batch() {
local task="$1"
shift
for file in "$@"; do
echo "处理: $file"
codex -q "$task $file" > "processed_$(basename $file)"
done
}
💡 使用示例
# 代码审查
codex-review src/
# 生成测试
codex-test src/user_service.py
# 生成文档
codex-doc src/api/
# 批量处理
codex-batch "重构" src/*.py
6. CI/CD 集成
🔄 GitHub Actions
# .github/workflows/codex-review.yml
name: Codex Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Codex CLI
run: npm install -g @openai/codex
- name: Run Code Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex -q "审查 PR #${{ github.event.pull_request.number }} 的代码,重点关注安全和性能" > review.md
- name: Comment PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: review
})
🚀 GitLab CI
# .gitlab-ci.yml
stages:
- review
- test
- deploy
codex-review:
stage: review
image: node:20
script:
- npm install -g @openai/codex
- codex -q "审查代码质量" > review.md
artifacts:
paths:
- review.md
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
codex-test:
stage: test
image: node:20
script:
- npm install -g @openai/codex
- codex -q --approval-mode full-auto "运行测试"
rules:
- if: $CI_COMMIT_BRANCH == "main"
🔧 Jenkins Pipeline
// Jenkinsfile
pipeline {
agent any
environment {
OPENAI_API_KEY = credentials('openai-api-key')
}
stages {
stage('Install') {
steps {
sh 'npm install -g @openai/codex'
}
}
stage('Review') {
steps {
sh 'codex -q "审查代码质量" > review.md'
archiveArtifacts 'review.md'
}
}
stage('Test') {
steps {
sh 'codex -q --approval-mode full-auto "运行测试"'
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
sh 'codex -q --approval-mode full-auto "部署到生产环境"'
}
}
}
}
💡 CI/CD 最佳实践
-
使用环境变量
env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} -
使用静默模式
codex -q "任务" -
保存结果
artifacts: paths: - review.md -
错误处理
set -e codex -q "任务" || exit 1 -
使用缓存
- uses: actions/cache@v3 with: path: ~/.npm key: npm-${{ hashFiles('package-lock.json') }}
7. 定时任务
⏰ Cron 任务
# 编辑 crontab
crontab -e
# 每天凌晨 2 点运行代码审查
0 2 * * * cd /path/to/project && codex -q "审查代码质量" > /var/log/codex-review.log
# 每周一早上 9 点生成周报
0 9 * * 1 cd /path/to/project && codex -q "生成本周开发周报" > /reports/weekly_$(date +\%Y\%m\%d).md
# 每小时检查代码风格
0 * * * * cd /path/to/project && codex -q "检查代码风格" > /var/log/codex-lint.log
📅 定时脚本
#!/bin/bash
# daily-review.sh - 每日代码审查脚本
PROJECT_DIR="/path/to/project"
REPORT_DIR="/var/log/codex"
DATE=$(date +%Y%m%d)
# 创建报告目录
mkdir -p "$REPORT_DIR"
# 运行代码审查
cd "$PROJECT_DIR"
codex -q "审查代码质量,生成详细报告" > "$REPORT_DIR/review_$DATE.md"
# 检查是否有严重问题
if grep -q "严重问题" "$REPORT_DIR/review_$DATE.md"; then
# 发送通知
echo "发现严重问题!" | mail -s "代码审查警告" team@example.com
fi
# 清理 30 天前的报告
find "$REPORT_DIR" -name "review_*.md" -mtime +30 -delete
🔄 定时服务
# /etc/systemd/system/codex-review.service
[Unit]
Description=Codex Code Review
After=network.target
[Service]
Type=oneshot
User=deploy
WorkingDirectory=/path/to/project
ExecStart=/usr/local/bin/codex -q "审查代码质量"
Environment=OPENAI_API_KEY=sk-xxx
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/codex-review.timer
[Unit]
Description=Run Codex Review Daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# 启用定时器
sudo systemctl enable codex-review.timer
sudo systemctl start codex-review.timer
# 查看状态
sudo systemctl status codex-review.timer
8. 批量处理
📁 批量文件处理
# 处理目录下的所有 Python 文件
for file in src/*.py; do
echo "处理: $file"
codex -q "重构 $file,优化代码结构" > "refactored_$(basename $file)"
done
# 并行处理(使用 xargs)
find src -name "*.py" | xargs -P 4 -I {} sh -c '
codex -q "重构 {}" > "refactored_$(basename {})"
'
# 使用 GNU Parallel
find src -name "*.py" | parallel -j 4 codex -q "重构 {}" '>' "refactored_{/}"
📋 批量任务
#!/bin/bash
# batch-tasks.sh - 批量执行任务
TASKS_FILE="tasks.txt"
OUTPUT_DIR="output"
mkdir -p "$OUTPUT_DIR"
# 读取任务列表
while IFS= read -r task; do
# 跳过空行和注释
[[ -z "$task" || "$task" == \#* ]] && continue
# 生成输出文件名
task_name=$(echo "$task" | tr ' ' '_' | tr '[:upper:]' '[:lower:]')
output_file="$OUTPUT_DIR/${task_name}.txt"
echo "执行任务: $task"
codex -q "$task" > "$output_file"
# 检查结果
if [ $? -eq 0 ]; then
echo "✅ 成功: $output_file"
else
echo "❌ 失败: $task"
fi
done < "$TASKS_FILE"
📊 任务列表示例
# tasks.txt
# 代码审查
审查 src/auth/ 目录的安全性
审查 src/api/ 目录的性能
审查 src/models/ 目录的数据模型
# 文档生成
为 src/api/ 目录生成 API 文档
为 src/models/ 目录生成数据库字典
为项目生成 README.md
# 测试生成
为 src/auth/ 目录生成单元测试
为 src/api/ 目录生成集成测试
💡 批量处理技巧
-
使用任务队列
# 使用 Redis 队列 redis-cli lpush tasks "任务1" "任务2" "任务3" while task=$(redis-cli rpop tasks); do codex -q "$task" > "output_$task.txt" done -
并行处理
# 使用后台进程 for task in tasks/*; do codex -q "$(cat $task)" > "output_$(basename $task)" & done wait -
错误重试
max_retries=3 for i in $(seq 1 $max_retries); do if codex -q "$task"; then break fi echo "重试 $i/$max_retries..." sleep 5 done
9. 实战案例
💼 案例1:自动化代码审查
#!/bin/bash
# auto-review.sh
set -e
REPO_URL="https://github.com/org/repo"
PR_NUMBER=$1
# 克隆仓库
git clone "$REPO_URL" repo
cd repo
# 获取 PR 代码
git fetch origin pull/$PR_NUMBER/head:pr-$PR_NUMBER
git checkout pr-$PR_NUMBER
# 运行代码审查
codex -q "审查 PR #$PR_NUMBER 的代码,重点关注:
1. 安全漏洞
2. 性能问题
3. 代码规范
4. 测试覆盖" > review.md
# 发送结果
echo "代码审查完成,结果保存在 review.md"
cat review.md
💼 案例2:自动化测试生成
#!/bin/bash
# auto-test.sh
set -e
SRC_DIR="src"
TEST_DIR="tests"
# 遍历所有 Python 文件
find "$SRC_DIR" -name "*.py" | while read file; do
# 生成测试文件名
test_file="$TEST_DIR/test_$(basename $file)"
# 跳过已存在的测试
if [ -f "$test_file" ]; then
echo "跳过: $test_file (已存在)"
continue
fi
# 生成测试
echo "生成测试: $file -> $test_file"
codex -q "为 $file 生成 pytest 单元测试,覆盖所有公开方法" > "$test_file"
done
# 运行测试
echo "运行测试..."
pytest "$TEST_DIR" -v
💼 案例3:自动化文档生成
#!/bin/bash
# auto-doc.sh
set -e
SRC_DIR="src"
DOCS_DIR="docs"
mkdir -p "$DOCS_DIR"
# 生成 API 文档
echo "生成 API 文档..."
codex -q "为 $SRC_DIR/api/ 目录生成 RESTful API 文档,包含:
1. 接口列表
2. 请求参数
3. 响应格式
4. 示例代码" > "$DOCS_DIR/api.md"
# 生成数据库字典
echo "生成数据库字典..."
codex -q "为 $SRC_DIR/models/ 目录生成数据库字典,包含:
1. 表结构
2. 字段说明
3. 索引信息
4. 关系图" > "$DOCS_DIR/database.md"
# 生成 README
echo "生成 README..."
codex -q "为项目生成 README.md,包含:
1. 项目介绍
2. 快速开始
3. 目录结构
4. 开发指南
5. 部署说明" > README.md
echo "文档生成完成!"
💼 案例4:自动化部署
#!/bin/bash
# auto-deploy.sh
set -e
ENV=$1 # dev, staging, prod
# 验证环境
if [[ ! "$ENV" =~ ^(dev|staging|prod)$ ]]; then
echo "用法: $0 <dev|staging|prod>"
exit 1
fi
# 代码审查
echo "运行代码审查..."
codex -q "审查代码质量,确保可以部署到 $ENV 环境" > review.md
# 检查审查结果
if grep -q "严重问题" review.md; then
echo "发现严重问题,取消部署"
exit 1
fi
# 运行测试
echo "运行测试..."
codex -q --approval-mode full-auto "运行所有测试"
# 部署
echo "部署到 $ENV 环境..."
codex -q --approval-mode full-auto "部署应用到 $ENV 环境"
echo "部署完成!"
10. 最佳实践
✅ DO - 推荐做法
-
使用静默模式
codex -q "任务" -
处理错误
set -e codex -q "任务" || exit 1 -
保存日志
codex -q "任务" 2>&1 | tee task.log -
使用环境变量
export OPENAI_API_KEY="sk-xxx" codex -q "任务" -
设置超时
timeout 300 codex -q "任务" -
并行处理
for task in tasks/*; do codex -q "$(cat $task)" & done wait
❌ DON’T - 避免事项
-
不要硬编码 API Key
# ❌ 错误 codex -q "任务" # 需要先设置环境变量 # ✅ 正确 export OPENAI_API_KEY="sk-xxx" codex -q "任务" -
不要忽略错误
# ❌ 错误 codex -q "任务" echo "继续执行..." # ✅ 正确 codex -q "任务" || exit 1 -
不要无限重试
# ❌ 错误 while true; do codex -q "任务" && break done # ✅ 正确 for i in {1..3}; do codex -q "任务" && break sleep 5 done -
不要处理敏感数据
# ❌ 错误 codex -q "处理包含密码的文件" # ✅ 正确 # 先脱敏再处理
📋 检查清单
- 使用静默模式
- 处理错误情况
- 保存日志
- 使用环境变量
- 设置超时
- 并行处理(如需要)
- 不处理敏感数据
- 测试脚本
11. 总结
🎯 核心要点
- 什么是非交互模式:无用户交互的自动化模式
- 为什么用:提升效率、可集成、可批量
- 怎么用:
codex -q "任务"+ 输出重定向 - 脚本集成:Bash、Python、Shell 函数
- CI/CD 集成:GitHub Actions、GitLab CI、Jenkins
- 定时任务:Cron、Systemd Timer
- 批量处理:for 循环、xargs、parallel
📋 快速开始
# 1. 简单任务
codex -q "生成文档" > docs/api.md
# 2. 脚本集成
echo 'codex -q "审查代码" > review.md' >> script.sh
# 3. CI/CD 集成
# 参考上面的 GitHub Actions 示例
# 4. 定时任务
crontab -e
# 0 2 * * * codex -q "审查代码" > review.md
📚 下一步
- 📖 第9篇:[SDK 开发指南:用代码调用 AI 编程能力]
- 🔧 实践:写一个自动化脚本
- 💬 社区:分享你的自动化方案
📝 系列文章导航
- 上一篇:[第7篇 - Skills 技能系统:从安装到开发完全指南]
- 下一篇:[第9篇 - SDK 开发指南:用代码调用 AI 编程能力]
- 系列目录:[Codex CLI 中文官方手册与使用指南(12篇)]
💡 遇到问题? 欢迎在评论区留言,我会及时回复!
👍 觉得有用? 点赞收藏,帮助更多开发者!
更多推荐


所有评论(0)