🚀 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 最佳实践

  1. 使用环境变量

    env:
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    
  2. 使用静默模式

    codex -q "任务"
    
  3. 保存结果

    artifacts:
      paths:
        - review.md
    
  4. 错误处理

    set -e
    codex -q "任务" || exit 1
    
  5. 使用缓存

    - 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/ 目录生成集成测试

💡 批量处理技巧

  1. 使用任务队列

    # 使用 Redis 队列
    redis-cli lpush tasks "任务1" "任务2" "任务3"
    
    while task=$(redis-cli rpop tasks); do
      codex -q "$task" > "output_$task.txt"
    done
    
  2. 并行处理

    # 使用后台进程
    for task in tasks/*; do
      codex -q "$(cat $task)" > "output_$(basename $task)" &
    done
    wait
    
  3. 错误重试

    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 - 推荐做法

  1. 使用静默模式

    codex -q "任务"
    
  2. 处理错误

    set -e
    codex -q "任务" || exit 1
    
  3. 保存日志

    codex -q "任务" 2>&1 | tee task.log
    
  4. 使用环境变量

    export OPENAI_API_KEY="sk-xxx"
    codex -q "任务"
    
  5. 设置超时

    timeout 300 codex -q "任务"
    
  6. 并行处理

    for task in tasks/*; do
      codex -q "$(cat $task)" &
    done
    wait
    

❌ DON’T - 避免事项

  1. 不要硬编码 API Key

    # ❌ 错误
    codex -q "任务"  # 需要先设置环境变量
    
    # ✅ 正确
    export OPENAI_API_KEY="sk-xxx"
    codex -q "任务"
    
  2. 不要忽略错误

    # ❌ 错误
    codex -q "任务"
    echo "继续执行..."
    
    # ✅ 正确
    codex -q "任务" || exit 1
    
  3. 不要无限重试

    # ❌ 错误
    while true; do
      codex -q "任务" && break
    done
    
    # ✅ 正确
    for i in {1..3}; do
      codex -q "任务" && break
      sleep 5
    done
    
  4. 不要处理敏感数据

    # ❌ 错误
    codex -q "处理包含密码的文件"
    
    # ✅ 正确
    # 先脱敏再处理
    

📋 检查清单

  • 使用静默模式
  • 处理错误情况
  • 保存日志
  • 使用环境变量
  • 设置超时
  • 并行处理(如需要)
  • 不处理敏感数据
  • 测试脚本

11. 总结

🎯 核心要点

  1. 什么是非交互模式:无用户交互的自动化模式
  2. 为什么用:提升效率、可集成、可批量
  3. 怎么用codex -q "任务" + 输出重定向
  4. 脚本集成:Bash、Python、Shell 函数
  5. CI/CD 集成:GitHub Actions、GitLab CI、Jenkins
  6. 定时任务:Cron、Systemd Timer
  7. 批量处理: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篇)]

💡 遇到问题? 欢迎在评论区留言,我会及时回复!

👍 觉得有用? 点赞收藏,帮助更多开发者!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐