news 2026/9/17 5:55:05

gogcli 实战:使用 `gog classroom submissions get` 在终端中查询学生提交详情

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
gogcli 实战:使用 `gog classroom submissions get` 在终端中查询学生提交详情

gogcli 实战:使用gog classroom submissions get在终端中查询学生提交详情

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

本文是 gogcli(Google Workspace in your terminal)Classroom 命令族的实战指南,聚焦于gog classroom submissions get这一只读查询命令:它通过 Google Classroom API 按课程、作业与提交标识获取单个学生提交(Student Submission)的完整状态,包括提交状态(state)、是否迟交(late)、草稿成绩与已评定成绩(draft/assigned grade)等核心字段。读完本文,你将掌握该命令的完整语法、输出格式、常用 Flag 用法,并能结合源码理解其底层实现与常见错误处理策略,从而在脚本或自动化工作流中可靠地查询提交状态。

命令定位:Classroom 命令族中的只读查询入口

gog classroom submissions get位于 gogcli 的 classroom 子命令体系中。在命令族定义中,ClassroomCmd聚合了 courses、coursework、submissions、announcements 等十余个功能域,其中ClassroomSubmissionsCmd统一管理学生提交相关操作:

  • list(别名ls):列出学生提交(参考文档)
  • get(别名infoshow):获取单个学生提交(即本文主题)
  • turn-in(别名turnin):交卷
  • reclaim(别名undo):撤回提交
  • return(别名send):返回提交
  • grade(别名setedit):设置草稿/已评定成绩

从源码角度看,get只调用 Google Classroom API 的StudentSubmissions.Get方法(只读操作),因此它天然适合与--readonly这类安全 Flag 组合使用,是巡检提交状态、编写脚本的理想入口。其兄弟命令的文档与定位详见 gog classroom submissions 总览。

使用语法与位置参数

命令的基本语法如下(括号内为可选别名,尖括号内为必填位置参数):

gog classroom (class) submissions (submission) get (info,show) <courseId> <courseworkId> <submissionId>

三个位置参数缺一不可,其含义为:

参数含义说明
courseId课程 ID课程标识符或别名,来自gog classroom courses list
courseworkId作业 ID该课程下的作业(CourseWork)标识符
submissionId提交 ID学生提交(StudentSubmission)标识符

在实际运行前,命令会先做参数校验:在 ClassroomSubmissionsGetCmd.Run 的实现 中,三个参数都会先经strings.TrimSpace去空白,任何一个为空都会返回usage错误(如empty courseIdempty courseworkIdempty submissionId),避免带着空参数发起无意义的 API 请求。

如何拿到这三个 ID

通常的工作流是先用列表命令找到目标:

# 1. 查看课程 gog classroom courses list # 2. 查看某课程下的作业 gog classroom coursework list <courseId> # 3. 查看某作业下的所有提交(含 submissionId) gog classroom submissions list <courseId> <courseworkId>

列表命令支持--state--user--late--max等过滤条件(详见 gog classroom submissions list 文档),可以快速定位到目标提交,再用get查看其完整状态。

输出格式:默认文本、JSON 与 TSV

get命令的输出模式受全局 Flag 控制,默认情况下输出为稳定的「字段名\t字段值」文本行。依据源码输出逻辑,默认输出包含以下字段:

输出字段说明输出条件
id提交 ID总是输出
user_id提交学生用户 ID总是输出
state提交状态总是输出
late是否迟交(true/false)总是输出
draft_grade草稿成绩总是输出(空值显示为空)
assigned_grade已评定成绩总是输出(空值显示为空)
updated更新时间(RFC3339)仅当 API 返回 UpdateTime 非空时
link网页端替代链接(AlternateLink)仅当 API 返回 AlternateLink 非空时

成绩字段经过formatFloatValue格式化(见 classroom_helpers.go),会去掉多余的尾随零(例如5.50显示为5.5),便于阅读与二次解析。

JSON 模式:脚本化首选

添加-j/--json/--machine后,命令输出标准的 JSON 结构,外层包裹一个submission键:

gog classroom submissions get -j <courseId> <courseworkId> <submissionId>
{ "submission": { "id": "123456789", "userId": "student@example.com", "state": "TURNED_IN", "late": false, "draftGrade": 9.5, "assignedGrade": 10, "updateTime": "2026-09-10T08:30:00Z", "alternateLink": "https://classroom.google.com/c/..." } }

JSON 模式与--results-only(只输出主结果,丢弃 envelope 字段)、--select(按逗号分隔字段选择输出,支持点路径)可组合使用,便于在 jq 等工具中进一步加工。

其他输出相关 Flag

  • -p/--plain/--tsv:输出稳定、可解析的 TSV 文本,无颜色渲染,适合 CI 与管道处理。
  • --color(默认auto):控制颜色输出,可选auto|always|never
  • --wrap-untrusted:在 JSON/raw 输出中,为外部获取的文本字段加上不受信内容标记。

全局 Flag 一览

get命令继承 gogcli 全部根级 Flag,下表为完整清单(取自命令参考文档):

FlagTypeDefaultHelp
--access-tokenstringUse provided access token directly (bypasses stored refresh tokens; token expires in ~1h)
-a
--account
--acct
stringAccount email, alias, or auto for authenticated Google API commands
--clientstringOAuth client name (selects stored credentials + token bucket)
--colorstringautoColor output: auto|always|never
--disable-commandsstringComma-separated list of disabled commands; dot paths allowed
-n
--dry-run
--dryrun
--noop
--preview
boolDo not make changes; print intended actions and exit successfully
--enable-commandsstringComma-separated list of enabled command prefixes; dot paths allowed (restricts CLI)
--enable-commands-exactstringComma-separated list of exact enabled commands; dot paths allowed and parent commands do not enable children
-y
--force
--assume-yes
--yes
boolSkip confirmations for destructive commands
--gmail-no-sendboolfalseBlock Gmail send operations (agent safety)
-h
--help
kong.helpFlagShow context-sensitive help.
--homestringOverride gogcli config/data/state/cache root (equivalent to GOG_HOME)
-j
--json
--machine
boolfalseOutput JSON to stdout (best for scripting)
--no-input
--non-interactive
--noninteractive
boolNever prompt; fail instead (useful for CI)
-p
--plain
--tsv
boolfalseOutput stable, parseable text to stdout (TSV; no colors)
--quota-projectstringGoogle Cloud project to bill for API usage (sent as X-Goog-User-Project; some APIs require it with --access-token or ADC)
--readonlyboolfalseBlock mutating API requests at runtime; auth add also requests read-only OAuth scopes
--results-onlyboolIn JSON mode, emit only the primary result (drops envelope fields like nextPageToken)
--select
--pick
--project
stringIn JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands.
-v
--verbose
boolEnable verbose logging
--versionkong.VersionFlagPrint version and exit
--wrap-untrustedboolfalseIn JSON/raw output, wrap fetched text fields in external untrusted-content markers

几个与本命令强相关的 Flag 使用建议:

  • --account/--acct:指定账户邮箱或别名;未指定时使用默认账户。get是认证命令,通过requireAccount(flags)解析账户。
  • --access-token:直接使用提供的访问令牌,绕过存储的刷新令牌(注意令牌约 1 小时过期),适合临时凭据场景。
  • --quota-project:指定用于 API 配额计费的 Google Cloud 项目(以X-Goog-User-Project头发送),某些 API 在使用--access-token或 ADC 时必须配置。
  • --readonly:在运行时拦截所有变更类 API 请求,且auth add时只申请只读 OAuth scope;get为只读操作,与该 Flag 天然兼容。
  • --no-input/--non-interactive:CI 环境下禁止交互提示,遇到需要确认的场景直接失败。

源码级原理:一条命令的完整调用链

理解底层实现有助于判断命令行为与排障。get的完整调用链如下:

  1. 账户解析Run方法首先调用requireAccount(flags)确定使用哪个 Google 账户(对应internal/cmd/classroom_submissions.goClassroomSubmissionsGetCmd.Run)。
  2. 服务构建:通过classroomService(ctx, account)创建 Classroom API 服务客户端。其底层实现在 internal/googleapi/classroom.go,即NewClassroom使用googleauth.ServiceClassroom服务名注册表创建classroom.NewService,按账户隔离凭据与令牌桶。
  3. 参数校验:三个位置参数去空白后逐一非空校验,空值直接返回 usage 错误。
  4. API 调用:执行svc.Courses.CourseWork.StudentSubmissions.Get(courseID, courseworkID, submissionID).Context(ctx).Do(),即 Google Classroom API 的courses.courseWork.studentSubmissions.get接口。
  5. 错误包装:失败时经wrapClassroomError统一包装(见 classroom_helpers.go),对两类典型错误给出可执行提示。
  6. 输出:按 JSON 或默认文本模式渲染结果。

值得注意的是,整个调用链与turn-inreclaimreturngrade共享同一套账户解析与服务构建逻辑(见 classroom_submissions.go 中submissionActionClassroomSubmissionsGradeCmd),而grade还会通过buildClassroomSubmissionGradePlan生成 updateMask 后调用Patch(相关单测见 classroom_submissions_plan_test.go),说明 gogcli 对提交域的操作采用统一的规划-执行模式,get是其只读端点。

错误处理与排障指南

依据 wrapClassroomError 的实现,get命令会针对两类高频错误输出可执行的修复提示:

  1. Classroom API 未启用:当错误信息包含accessNotConfiguredClassroom API has not been used时,提示需要在 Google Cloud Console 中启用 Classroom API(classroom.googleapis.com)。
  2. 权限不足:当错误信息包含insufficientPermissionsinsufficient authentication scopes时,提示使用gog auth add <account> --services classroom重新认证以获取 Classroom 相关 OAuth scope。

其他常见问题:

  • 参数错误:任何 ID 为空都会立即返回 usage 错误(empty courseId等),不会发起网络请求,可通过-h查看帮助确认参数顺序。
  • 找不到提交:若courseIdcourseworkIdsubmissionId组合不匹配(例如提交不属于该作业),API 会返回 NOT_FOUND 类错误,此时建议用list复核 ID。
  • CI 场景:搭配-j --no-input可避免任何交互阻塞;若需要在无结果场景下区分成功/失败,可参考list--fail-empty语义设计自己的退出码判断。

实战示例

# 默认文本输出 gog classroom submissions get 123456789 cw-001 sub-001 # 输出示例(文本模式) # id sub-001 # user_id student@example.com # state TURNED_IN # late false # draft_grade 9.5 # assigned_grade 10 # updated 2026-09-10T08:30:00Z # link https://classroom.google.com/c/... # JSON 输出,供 jq 消费 gog classroom submissions get -j 123456789 cw-001 sub-001 | jq '.submission.state' # 指定账户 + 明文 TSV gog classroom submissions get -p --account teacher@school.edu 123456789 cw-001 sub-001

从仓库中的实时测试脚本可看到该命令族的端到端验证方式:scripts/live-tests/classroom.sh中会先创建课程与作业,再执行gog classroom submissions list "$course_id" "$cw_id" --max 1 --json获取提交列表,为get类命令准备测试数据,这同样是一套可参考的「先 list 再 get」实战流程。

小结

gog classroom submissions get是 gogcli Classroom 提交域中轻量、只读、适合脚本化的查询端点。它用三个 ID 精确定位提交,默认输出稳定文本、可选 JSON/TSV 模式,并内置了针对「API 未启用」「权限不足」两类高频错误的可执行提示。结合其兄弟命令list/grade/return等(见 命令索引),可以在终端中完成从查看提交、评定成绩到返回提交的完整教学管理闭环。

延伸阅读

  • gog classroom submissions 命令族总览
  • gog classroom submissions list(获取提交 ID)
  • gog classroom submissions grade(设置成绩)
  • gog classroom 命令族
  • 提交域命令源码
  • Classroom API 服务构建与错误包装 与 classroom_helpers.go
  • 实时测试脚本 classroom.sh

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 5:54:40

DDR5 SPD读写实战:从SPD Hub原理到编程器安全修改

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/17 5:52:30

供水管网压力监测平台是什么?5 大核心功能与应用价值详解

供水管网是城市运行最基础的民生设施之一&#xff0c;其压力稳定直接关系到千家万户的用水安全。长期以来&#xff0c;管网老化、漏损居高不下、爆管事故难以预警等问题&#xff0c;困扰着供水行业的管理者。2026年6月1日起施行的《供水条例》&#xff0c;首次以行政法规形式明…

作者头像 李华
网站建设 2026/9/17 5:51:16

从教辅 PDF 到可执行题库:知识点抽取、建模与出题校验

简介&#xff1a;这份人教版五年级上册数学知识点汇总以PDF形式呈现&#xff0c;面向五年级学生、家长及数学教师&#xff0c;用于课前预习、单元复习与期末查漏补缺。文件共1个&#xff0c;为113KB的PDF文档&#xff0c;篇幅精简、目录清晰&#xff0c;按教材顺序梳理七个单元…

作者头像 李华
网站建设 2026/9/17 5:50:25

解决Windows 10下Android Studio HAXM安装失败问题

1. 问题现象与初步排查最近在Windows 10环境下配置Android Studio开发环境时&#xff0c;遇到了一个典型问题——安装HAXM&#xff08;硬件加速执行管理器&#xff09;驱动时频繁报错。错误提示为"Intel HAXM installation failed"&#xff0c;控制台显示"Faile…

作者头像 李华
网站建设 2026/9/17 5:49:54

Intel SoC FPGA中断驱动开发:从设备树到Linux驱动全流程

相信做 Intel SoC FPGA 的朋友都有这种体会&#xff1a;FPGA 里辛辛苦苦做了个中断源&#xff0c;结果 HPS 这边的 Linux 一点反应都没有&#xff0c;要么设备树不对&#xff0c;要么驱动没写好。作为系列教程的第四篇&#xff0c;这篇文章就聚焦“设计中断驱动程序”这一环。前…

作者头像 李华
网站建设 2026/9/17 5:49:40

Linux内核崩溃调试实战:从Oops到KASAN的完整排查路径

半夜两点被值班电话叫起来&#xff0c;屏幕上滚动着一行熟悉的英文——unable to handle kernel null pointer dereference at virtual address&#xff0c;后面跟着一堆看不懂的寄存器值和调用栈。这种场景对每一个搞Linux内核或者驱动开发的人来说都不陌生。说句实话&#xf…

作者头像 李华