Codex 非交互模式
非交互模式允许你在脚本、CI/CD 流水线或无头环境中使用 Codex。本节详细介绍如何配置和使用非交互模式。
基础用法
执行单个任务
基本 exec 命令
# 执行简单任务
codex exec "列出当前目录的 Python 文件"
# 使用双引号处理复杂命令
codex exec "分析 src/ 目录的代码结构"
codex exec "列出当前目录的 Python 文件"
# 使用双引号处理复杂命令
codex exec "分析 src/ 目录的代码结构"
从标准输入读取
stdin 输入
# 从管道读取
echo "解释这段代码" | codex exec --stdin
# 从文件读取
codex exec --stdin < task.txt
# 多行输入
cat <<EOF | codex exec --stdin
创建一个函数计算阶乘
测试这个函数
EOF
echo "解释这段代码" | codex exec --stdin
# 从文件读取
codex exec --stdin < task.txt
# 多行输入
cat <<EOF | codex exec --stdin
创建一个函数计算阶乘
测试这个函数
EOF
非交互模式非常适合自动化任务和脚本集成。
命令行参数
常用参数
| 参数 | 说明 |
|---|---|
exec "任务" | 执行指定任务 |
--stdin | 从标准输入读取任务 |
--model, -m | 指定模型 |
--no-auto-approve | 禁用自动确认 |
--output, -o | 输出到文件 |
完整示例
完整参数示例
# 指定模型
codex exec -m gpt-5.4-mini "审查代码"
# 输出到文件
codex exec "创建 README" -o README.md
# 禁用自动确认
codex exec --no-auto-approve "运行测试"
# 组合使用
codex exec -m gpt-5.4 "审查 PR" --output review.md
codex exec -m gpt-5.4-mini "审查代码"
# 输出到文件
codex exec "创建 README" -o README.md
# 禁用自动确认
codex exec --no-auto-approve "运行测试"
# 组合使用
codex exec -m gpt-5.4 "审查 PR" --output review.md
配置
配置文件设置
配置非交互模式
# 非交互模式默认设置
[exec]
# 默认模型
default_model = "gpt-5.4"
# 自动批准阈值
auto_approve_threshold = "medium"
# 超时时间(秒)
timeout = 300
[exec]
# 默认模型
default_model = "gpt-5.4"
# 自动批准阈值
auto_approve_threshold = "medium"
# 超时时间(秒)
timeout = 300
执行策略
在非交互模式下,默认策略通常是 deny(拒绝可能产生副作用的操作):
设置执行策略
# 使用 ask 策略
codex exec --approval ask "创建文件"
# 使用 approve 策略(谨慎使用)
codex exec --approval approve "运行测试"
# 使用 deny 策略(只读)
codex exec --approval deny "分析代码"
codex exec --approval ask "创建文件"
# 使用 approve 策略(谨慎使用)
codex exec --approval approve "运行测试"
# 使用 deny 策略(只读)
codex exec --approval deny "分析代码"
出于安全考虑,非交互模式下默认禁用可能产生副作用的操作。
Shell 脚本集成
基本脚本
Shell 脚本示例
#!/bin/bash
# 使用 Codex 进行代码审查
codex exec "审查 src/ 目录中的代码" --output review.md
if [ $? -eq 0 ]; then
echo "审查完成,结果已保存到 review.md"
else
echo "审查失败"
fi
# 使用 Codex 进行代码审查
codex exec "审查 src/ 目录中的代码" --output review.md
if [ $? -eq 0 ]; then
echo "审查完成,结果已保存到 review.md"
else
echo "审查失败"
fi
批量处理
批量处理脚本
#!/bin/bash
# 批量审查多个文件
for file in $(find src -name "*.py"); do
echo "审查: $file"
codex exec "审查 $file 文件" --output "review_$(basename $file).md"
done
# 批量审查多个文件
for file in $(find src -name "*.py"); do
echo "审查: $file"
codex exec "审查 $file 文件" --output "review_$(basename $file).md"
done
条件执行
条件执行
#!/bin/bash
# 根据文件数量决定是否使用 Codex
FILE_COUNT=$(find src -name "*.py" | wc -l)
if [ $FILE_COUNT -gt 10 ]; then
echo "文件较多,使用 Codex 批量审查"
codex exec "审查所有 Python 文件" --output full_review.md
else
echo "文件较少,逐个审查"
for file in $(find src -name "*.py"); do
codex exec "简单审查 $file"
done
fi
# 根据文件数量决定是否使用 Codex
FILE_COUNT=$(find src -name "*.py" | wc -l)
if [ $FILE_COUNT -gt 10 ]; then
echo "文件较多,使用 Codex 批量审查"
codex exec "审查所有 Python 文件" --output full_review.md
else
echo "文件较少,逐个审查"
for file in $(find src -name "*.py"); do
codex exec "简单审查 $file"
done
fi
CI/CD 集成
GitHub Actions
GitHub Actions 工作流
span style="color: green;">
name: Code Review
on: [pull_request]
jobs:
codex-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Codex
uses: openai/codex-action@v1
- name: Run Code Review
run: |
codex exec "Review code changes in this PR" \
--output review.md
- name: Upload Review
uses: actions/upload-artifact@v4
with:
name: code-review
path: review.md
name: Code Review
on: [pull_request]
jobs:
codex-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Codex
uses: openai/codex-action@v1
- name: Run Code Review
run: |
codex exec "Review code changes in this PR" \
--output review.md
- name: Upload Review
uses: actions/upload-artifact@v4
with:
name: code-review
path: review.md
GitLab CI
GitLab CI 配置
span style="color: #007F45;">
codex_review:
image: node:20
before_script:
- npm install -g @openai/codex
script:
- codex exec "Review changes in this merge request" --output review.md
artifacts:
paths:
- review.md
codex_review:
image: node:20
before_script:
- npm install -g @openai/codex
script:
- codex exec "Review changes in this merge request" --output review.md
artifacts:
paths:
- review.md
Jenkins
Jenkins Pipeline
pipeline {
agent any
stages {
stage('Code Review') {
steps {
sh 'codex exec "Review changed files" --output review.md'
}
}
}
post {
always {
archiveArtifacts 'review.md'
}
}
}
agent any
stages {
stage('Code Review') {
steps {
sh 'codex exec "Review changed files" --output review.md'
}
}
}
post {
always {
archiveArtifacts 'review.md'
}
}
}
将 Codex 集成到 CI/CD 流程中,可以实现自动化代码审查和质量检查。
最佳实践
输出处理
- 使用
--output将结果保存到文件 - 检查返回码判断执行是否成功
- 处理可能的错误情况
性能优化
- 使用
gpt-5.4-mini减少成本 - 批量处理多个任务
- 设置合理的超时时间
安全性
- 避免使用
--approval approve - 在 CI/CD 中使用只读模式
- 保护 API 密钥
在生产环境中使用非交互模式时,请格外注意安全问题。
常见问题
Q: 非交互模式支持所有功能吗?
大部分功能都支持,但某些需要交互确认的功能可能无法使用。
Q: 如何处理需要确认的操作?
使用 --no-auto-approve 参数,或在配置文件中设置执行策略。
Q: 输出格式可以定制吗?
目前支持纯文本输出和 Markdown 输出。
Q: 如何在 Docker 中使用?
将 Codex 安装到 Docker 镜像中,然后在 CI/CD 流程中调用。
点我分享笔记