实验提交的原理(可选)
下载插件,点点鼠标运行,敲敲键盘写作业,再点点鼠标提交,编程真的 so easy! 你有没有想过这一切背后的原理是什么?
本章为可选内容。
在进行后面的内容之前,请准备好终端。 未经特殊说明的操作在 Windows/macOS/Linux 效果都是类似的。
打开终端
对于使用 Windows 的同学,请在开始菜单中搜索 "powershell" 并打开。
一般来说,终端里运行的是一个特殊的 shell 程序。 如果你用的是 Windows,那么会是 powershell;如果你用的是 macOS,那么就是 zsh;如果你用的是 Linux,那么大概率会是 bash。
终端漫游
打开终端后,shell 会展示一个工作目录(Working Directory),它表明你现在正处在哪个文件夹下。
每个人在刚进入终端时的工作目录可能都有所不同,Windows 可能会在最前面加上文件夹所在的盘符(就是大家熟知的C盘、D盘等等)。 为了方便起见,后面我们会省略与讲解内容无关的文件夹前缀和盘符(或者用户名,如果你用的是 macOS 或者 Linux)。
以助教的 shell 为例,助教此时正处在 homework
文件夹中:
~/homework$
为了查看 homework
文件夹里都有什么东西,你可以输入命令 ls
1 后按回车:
~/homework$ ls
lab00-Code lab01-Code
~/homework$
如果一切顺利,你将会看到工作目录下的所有文件。
例如助教就在 homework
目录里放置了下载并解压完毕的 lab00-Code
文件夹和 lab01-Code
文件夹。
进入一个文件夹
当然工作目录并不总是处在我们希望的位置,能不能像串门一样换一个工作目录呢?
答案是可以的。
在终端输入 cd lab00-Code
2 后回车,就会发现工作目录现在变成了 lab00-Code
这个文件夹。再执行 ls
指令就会发现我们下载好的文件都在里面了。
~/homework$ cd lab0-Code
~/homework/lab00-Code$ ls
hello.py lab00.ok lab00.py ok
输出的格式不一定完全相同,但应当至少包含
ok
、lab00.py
、hello.py
和lab00.ok
四个文件。
同名的文件夹可能有很多(例如程序设计课也可能会有 lab00-Code
),为了表示 homework
下面的这个 lab00-Code
,我们会用 homework/lab00-Code
这样以 /
连接的文件路径(File Path)称呼它,以区别于其他文件夹下的 lab00-Code
。
退出当前文件夹
除了进入一个文件夹,还可以退出一个文件夹。
例如现在我们想要退出 lab00-Code
文件夹,回到 homework
文件夹,然后去看看别的作业。那么我们可以输入 cd ..
~/homework/lab00-Code$ cd ..
~/homework$ ls
lab00-Code lab01-Code
可以看到,我们 ls
的结果又变成了一开始的样子,这说明现在的工作目录又回到了 homework
这个文件夹。
切换盘符(Windows)
以从 C 盘切换到 D 盘为例。在终端中输入 D:
后回车:
PS C:\> D:
PS D:\>
提交作业
现在,请你利用刚刚掌握的命令,把工作目录切换到
lab00-Code
这个解压后的实验文件夹下。
前面提到我们用 ok 来提交实验。
在使用 ls
命令时,你应该看到了两个和 ok 相关的文件,分别是 ok
和 lab00.ok
。
lab00.ok
你可以用编辑器打开 lab00.ok
看看里面的内容。
lab00.ok
描述了:
- 实验的名字,这里是
Getting Started
- 需要提交程序的名字,这里是
lab00.py
- 测试,这里 ok 给每个实验都安排了 doctest 测试
- 和一些你暂时不知道也没有关系的内容
{
"name": "Getting Started",
"endpoint": "lab00",
"src": [
"lab00.py"
],
"tests": {
"lab00.py:twenty_twenty_four": "doctest",
"lab00.py:sum": "doctest",
"lab00.py:diff_square": "doctest"
},
"protocols": [
"file_contents",
"grading",
"unlock",
"analytics",
"backup"
]
}
lab00.ok
是指导 ok
怎么本地测试和提交我们的程序的配置文件(Configuration File),它就像助教写给 ok
的任务。
用 ok 提交作业
ok
是负责提交实验的程序。
要本地测试某一道具体的题目(例如twenty_twenty_four
)只需要输入
python ok -q twenty_twenty_four --local
要本地测试所有题目只需要输入
python ok --local
要提交所有题目只需要输入
python ok --submit
这么多用法,助教是怎么知道要这么用的?
这是个很好的问题!
实际上助教也不是生来就知道怎么用 ok
的。
要想知道 ok
的用法,只需要在终端里输入 python ok --help
,精简后的输出内容展示如下:
$ python ok --help
usage: python ok [--help] [options]
...
You can run all tests with
python ok
...
这里 --help
的用途是让 ok
告诉我们怎么让它替我们交作业(或者是做一些别的事情)。
这段文字虽然长,但理解起来并不困难,你可以试着扫一眼看看能不能发现什么有趣的事情。
插件的原理
TBD
ls 的全称是 List
cd 的全称是 Change Directory