输出格式
每个命令都支持 -o / --output 来控制输出格式。该标志在全局注册,因此读取、写入、删除以及其他所有子命令都会一致地遵循它。根据实际用途选择合适的格式:阅读、脚本编写或数据导出。
默认格式,针对人类阅读优化。
redmine issues list --project myprojectID TRACKER STATUS PRIORITY SUBJECT123 Bug Open High Fix login timeout124 Feature Open Normal Add dark mode机器可读的输出格式,适合脚本编写和管道操作。
redmine issues list --project myproject -o json[ { "id": 123, "tracker": {"id": 1, "name": "Bug"}, "status": {"id": 1, "name": "Open"}, "priority":{"id": 2, "name": "High"}, "subject": "Fix login timeout" }]逗号分隔值格式,适用于电子表格和数据分析。
redmine issues list --project myproject -o csvID,Tracker,Status,Priority,Subject123,Bug,Open,High,Fix login timeout124,Feature,Open,Normal,Add dark mode与 JSON 配合使用
Section titled “与 JSON 配合使用”JSON 输出可与 jq 配合用于即席分析:
# IDs of all open bugsredmine issues list --tracker Bug -o json | jq '.[].id'
# Count issues by statusredmine issues list --project myproject -o json \ | jq 'group_by(.status.name) | map({status: .[0].status.name, count: length})'JSON 输出结构
Section titled “JSON 输出结构”-o json 会在 stdout 上产生两种顶层结构:
-
原始资源:用于获取或返回数据的命令 (例如
issues list、issues get、project create等)。输出内容就是 API 返回的资源对象,或者资源对象数组。 -
动作信封:用于那些没有自然响应体的变更类命令 (例如
issues close、issues delete、issues assign、wiki delete、memberships delete等)。该信封结构稳定且精简:{"ok": true,"action": "deleted","resource": "project","id": "demo","message": "Project \"demo\" deleted"}ok表示该命令是否实际改变了状态。某些命令即使成功执行,但没有内容需要变更,也可能返回相同结构且ok: false,并附带说明性的message。action的取值集合很小且刻意保持稳定:created、updated、deleted、closed、reopened、assigned、commented、logged、user_added、user_removed、logged_in、logged_out、switched、installed、opened。
JSON 错误信封
Section titled “JSON 错误信封”启用 -o json 后,如果命令执行失败,CLI 会将结构化错误信封写到 stdout,并以非零状态码退出:
{ "error": { "message": "Resource not found.", "code": "not_found" }}code 来自一组稳定且有限的值:not_found、auth_failed、forbidden、validation_failed、server_error、unknown。校验错误还会包含 details 数组,其中列出 Redmine 返回的各项字段错误信息。
stdout 与 stderr
Section titled “stdout 与 stderr”- 机器可读输出(JSON、CSV、表格行)始终写入
stdout。 - 面向人的信息(非 JSON 模式下的成功确认、警告、进度 spinner、更新检查提示)始终写入
stderr。
这种分离是稳定的。脚本可以安全地把 stdout 重定向到文件,或者直接通过管道传给 jq,而不必担心状态提示混入输出。
在配置文件中设置默认格式:
output_format: table-o 标志始终会覆盖单次命令的默认格式。