APP下载

基于Linux的OnlineJudge在线提交环境的搭建

2017-07-05卢云宏侯文涵赵前张丽颖

电子技术与软件工程 2017年12期
关键词:命令行平台程序设计

卢云宏++侯文涵++赵前++张丽颖++周世平

摘 要OnlineJudge(OJ)是基于图形化用户界面的在线评测系统,用于在线检测代码的正确性。本文利用python语言和Linux环境的命令行方式,为当前OJ设计并搭建一个基于Linux的纯命令行在线提交环境,使用该环境可以在纯命令行下向OJ提交题目。该环境成本低,占用资源少,运行速度快,服务端便于统一管理。

【关键词】程序设计 命令行 在线提交环境(平台)

1 前言

人机交互随软件技术的发展而进步,一直在按照用户的期望向着友好、方便、自然的方向发展。人机交互从原始的命令行(Command Line Interface,CLI)到图形化用户界面(Graphical User Interface, GUI),再发展到现在的自然用户界面(NaturalUserInterface, NUI)。虽然当前CUI已经不是主流了,但命令行技术作为更接近底层的文本模式,永远不会过时。

随着程序设计基础教学的发展,各个高校纷纷建立OJ,但当前OJ平台是基于图形化用户界面的,目前还没有OJ平台使用命令行界面。针对当前的情况,本文使用纯命令行界面,设计并搭建了纯命令行的OJ在线提交环境。作为日常使用,图形化界面是方便且易于操作的,但作为服务器,图形模式会占用大量的系统资源,尤其是内存。基于服务器的考虑,该环境的搭建借用Linux环境的命令行方式。系统终端为纯文本,不使用图形化界面,占用资源少,运行速度快,可以对资源有效利用。另外,该系统运行环境相对简单,不需要太多的外部环境,客户端不需要特殊环境搭建,可以通过终端方式(借用putty,ssh,Xshell等工具)实现登录。

2 实验平台环境搭建

本文基于远程登录,ssh映射的原理,将OJ服务器与用户之间增加一个Linux服务器和一个中转服务器,搭建该环境。使用的搭建工具包括Linux服务器,OJ服务器,终端软件。搭建提交环境步骤如下:

(1)实现端口转发。因为Linux服务器使用的是局域网,只能在特定(124)网段使用,需要将端口转发到中转服务器的特定(6666)端口上才能实现外网访问。

(2)创建固定数目的学生账户和老师账户。

(3)给账户设定权限。使学生之间不能互相访问进入各自的目录下,但教师用户可以进入学生的目录。

(4)将特定的功能分配到每个用户,如设定提交指令。

这其中所有的操作通过shell脚本实现,每一个操作都建了一个脚本。

当前OJ的结构是用户直接登录到OJ服务器,本文将OJ服务器与用户之间增加一个Linux服务器和一个中转服务器,各个服务器与运行在Linux服务器中的服务程序构成了为本校OJ设计的命令行提交系统。用户需要通过终端方式远程登录到Linux服务器,再进行相应操作,Linux服务器将登录请求和提交题目操作传递到OJ服务器,OJ服务器再对这些操作进行相应处理,再通过服务器之间的连接将结果依次返回。但是Linux服务器不能被用户直接访问,用户需要通过一个能被直接访问到的服务器登录到Linux服务器,所以我们将OJ平台的服务器作为中转服务器,靠ssh端口映射将中转服务器与Linux服务器联系起来。为了加以区别,本文将中转服务器与OJ服务器分别表示。系统的数据交互体系结构如图1所示。

3 系统实现

该系统实现的功能主要包括用户登录、代码编写及编译、代码运行、代码暂存、用户提交、结果返回。用户通过终端程序,远程登录到Linux服务器,再登录OJ账号,连接到OJ服务器,进行想要进行的操作。代码的编写可以使用Linux系统中的编辑器(如vim等)。在终端中输入“vimtest(文件名称).c”,回车进入vim编辑器,进入编辑状态(按a键),输入代码语句。输入完成后,退出编辑状态(按esc键),输入“:wq”,按回车,可保存代码文件且退出vim编辑器回到终端命令窗口。代码的编译可以依靠gcc命令,输入“gcctest.c”编译代码,最后使用“./test.out”执行,查看结果。因为代码的编写、编译、运行和暂存功能是在Linux服务器内部实现的,所以在这里重点介绍一下用户登录,用户提交(包括结果返回)的过程。

3.1 登录

通过终端程序远程登录到Linux服务器后,用户要进行登录账号操作,通过命令行向Linux服务器提交登录请求,Linux服务器接收到请求后,返回相应结果,用户输入账号密码。登录具体操作通过python语言中的提交表单实现,服务程序将用户输入的账号密码提交到OJ服务器,OJ服务器对账号密码进行验证。若验证错误,则登录失败,将结果依次返回;若验证正确,Linux服务器对登录结果进行处理,判断用户是否属于学生组,若是,则需要判断学生是否使用的自己的账号,检测cookie是否有效,是则登录成功,否则登录失败。不属于学生组(属于教师组)则只需检测cookie是否有效。用户登录的流程如图2所示。

3.2 题目提交

题目分为两类,一类是OJ系统上普通的题目,可以任意选择提交,需要输入的参数有四个,格式如下:

--problem

其中第一个参数(problem)是题目的种类,第二个参数(Problemid)是题目序号,第三个参数(Code file)是代码所在的文件,第四个参数(Language)是编程语言的种类。

另一类是作业题目,由学生将指定题目在规定时间内提交,需要输入的参数如下:

--contest

第二个参数(Contestcid)作业序号,其他参数意义同上。

用户提交的参数传递到Linux服务器,Linux服务器获取到参数数据且未检测到无异常后,程序会利用参数构造POST数据,如果线程不出现异常,学生提交的代码会通过该程序的POST数据传输到OJ。OJ接收到数据后会进行提交、判题、检测相似度和返回结果等操作。程序通过抓取网页数据,返回抓取到的信息并显示到命令行。学生提交题目流程如图3所示。

4 结果分析

本文针对烟台大学OJ(202.194.119.110)搭建了在线提交平台,测试得到如下结果:命令行界面资源消耗少,占用内存少,运行速度优于图形化用户界面;对服务器配置要求低,成本低于图形化界面;服务端实验环境便于统一维护;暂存代码功能相比u盘存储,更加方便安全。另外学生使用该提交环境的同时增加了对命令行的使用,减少了对鼠标等外设的依赖。

5 总结

本文針对当前程序设计基础教学中的需求,设计并搭建了基于Linux的在线提交环境,该环境实现了通过命令行提交代码的一系列功能。命令行不需要频繁地使用鼠标等其它交互手段,在熟练记忆命令的前提下,命令行的效率是所有的交互手段中最高的,通过使用该在线提交环境,可以快速便捷的进行命令行操作,提高了效率,节省了用户的时间。使用者在使用该在线提交环境的同时,对命令行有了更深入的了解,也提高了自己操作计算机的效率。

参考文献

[1]陈蒙,王锋,邓辉,季凯帆.基于Python的天文软件命令行界面设计与实现[J].天文研究与技术,2015(02):196-203.

[2]李斌.怎样在程序中与命令行程序交互[J].电脑编程技巧与维护,2015(12):95.

[3]房晓南,徐功文,孙云晨,张化祥,杜颜伶.基于.NET与在线评测的分布式程序设计教学实验平台[J].实验室研究与探索,2013(11):351-354+380.

作者简介

卢云宏(1972-),男,山东省烟台市人。博士学位。现为烟台大学计算机与控制工程学院讲师。主要研究方向为程序设计和编译技术。

作者单位

烟台大学计算机与控制工程学院 山东省烟台市 264005

猜你喜欢

命令行平台程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
一种基于docker集群的自动评价虚拟命令行实验终端构建及其在类Unix系统教学中的应用
Windows 10新版CMD更新
从细节入手,谈PLC程序设计技巧
华为交换机的批量绑定
高职高专院校C语言程序设计教学改革探索
以学霸讲堂为依托的学生党员学风引领平台建设研究
PLC梯形图程序设计技巧及应用