在线云评测系统日志(九):进行代码的编译

不同的语言执行不同的代码编译命令。


代码编译成功后进行子程序的判断运行。

def compile(solution_id, language, program_info, dblock):
    low_level()
    '''将程序编译成可执行文件'''
    language = language.lower()
    language_to_cmd={
        "c": "gcc",
        "c++": "g++",
        "python": "python2",
    }
    if language in language_to_cmd.keys():
        language = language_to_cmd[language]
    dir_work = os.path.join(config.work_dir, str(solution_id))
    build_cmd = {
        "gcc":
        "gcc main.c -o main",
        #"gcc main.c -o main -Wall -lm -O2 -std=c99 --static -DONLINE_JUDGE",
        "g++": 
        #"g++ main.cpp -O2 -Wall -lm --static -DONLINE_JUDGE -o main",
        "g++ main.cpp -o main",
        "java": "javac Main.java",
        "ruby": "reek main.rb",
        "perl": "perl -c main.pl",
        "pascal": 'fpc main.pas -O2 -Co -Ct -Ci',
        "go": '/opt/golang/bin/go build -ldflags "-s -w"  main.go',
        "lua": 'luac -o main main.lua',
        "python2": 'python2 -m py_compile main.py',
        "python3": 'python3 -m py_compile main.py',
        "haskell": "ghc -o main main.hs",
    }
    if language not in build_cmd.keys():
        return False
    p = subprocess.Popen(
        build_cmd[language],
        shell=True,
        cwd=dir_work,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
    out, err = p.communicate()  # 获取编译错误信息
    logging.info("complie info (empty means OK): " + out+err)
    err_txt_path = os.path.join(config.work_dir, str(solution_id), 'error.txt')
    f = file(err_txt_path, 'w')
    f.write(err)
    f.write(out)
    f.close()
    if p.returncode == 0:  # 返回值为0,编译成功
        return True
    program_info["compile_info"] = err + out
    #dblock.acquire()
    #update_compile_info(solution_id, err + out)  # 编译失败,更新题目的编译错误信息
    #dblock.release()
    return False


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 需求分析 随着人事考核制度的逐渐科学化、规范化、日常化,组织机构越来越多地要求能够对被考核侯选人实行全面的考核,其中,考核候选人周围的同事、领导及其被管理的员工对候选人的评价(所谓360度考核)是一个重要的参考依据。 但是,针对不同的员工组织可能采用不同的考核标准,同时,作为组织中的一员,所有的员工都有可能成为被考核候选人。并且,对员工的360度考核可能会有大量的数据,举例说,如某公司有员工1000人,现希望给10个被考评候选人进行测评打分,每个候选人需要考评10项内容,如此,将会产生10万条数据,这显然是巨大的,并且对数据的处理将是费时费力的,当将考核制度日常化之后,如果不能采用有效的考核手段,这种对时间、人员精力的占用将会是相当巨大的。 另一个方面,考虑到员工集中对侯选测评人进行打分时,可能会因为种种顾虑,而有失公允,故,应能将系统开发成基于Internet网络的在线测评系统。 二、开发工具及数据库管理系统 主要基于Internet技术同时兼顾Window应用来实现软件的创建、部署、使用的.net框架是微软21世纪主推的开发平台,并且,也是微软下一代操作系统策略的核心。 相比于JAVA是一个标准,.Net是一个架构,它包含了在操作系统上开发软件的所有层次,为集成任意平台上的显示技术、组件技术、数据驱动技术提供了丰富的层次。.net实际上封装了操作系统的部分功能,如文件处理和内存分配,这就为软件的移植奠定了良好的基础。 .net总体分为三层体系结构,底层是公共语言运行库(CLR),它是.net的核心,是驱动关键功能的引擎,它包括数据类型的公共系统,这些公共标准和标准接口约定使跨语言继承成为可能,除了内存的分配和管理之外,CLR还负责对象的跟踪、垃圾回收等。中间层包括一些重要的系统服务,如ADO.Net,XML类,组件模型,安全等,这些服务在总架构的控制之下,可以在各处通用,而且调用方式与语言无关。顶层主要提供给程序开发者开发Window窗体和WEB表单,WEB服务、应用服务。其中,WEB服务为程序使用SOAP在Internet上通信提供了一种机制,这也是未来网络信息处理的一个主要方向。 综观.net体系,它在软件项目开发中具有以下一些值得关注的优点。 1) 语言集成。可以使程序人员真正实现跨语言编程,而且相当多对下层对象的调用方法是统一的,且所有.Net支持的语言都被编译为标准的字节代码,所以语言之间的能和差异变小了。因而,使用什么语言编程已不是重要问题。 2) 与数据库特别SQL_server数据库良好接口,以及在Internet下编程的突破,使得开发WEB下的管理信息系统更加容易。 3) 提供对WEB服务的支持,且平台自动完成WEB服务的建设,隐藏了SOAP 、WSDL 、XML的复杂。 4)CLR集成了内存和过程的管理从而实现了系统的可伸缩,而绝大多数系统的功能都集中在CLR中,因此,不需要再付出任何代价,即可获得应用程序的较大伸缩。 5)秉承了微软的一贯作风:一个良好的IDE环境,即使开发人员可能需要适当地手工编写代码,但集成的开发环境为项目开发、调试、部署都带来了极大的方便。 数据库管理系统选用SQL_server2000,SQL_server2000是Microsoft推出的高能关系数据库管理系统,是Microsoft公司在大型数据库领域的最新版本和旗舰产品,也是Microsoft公司争夺电子商务领域最重要的核心部件市场——网络数据库平台的一大利器。 SQL_server2000是建立在SQL_server6.5和7.0坚固而雄厚的技术基础之上,是公论的运行在Window平台的最佳数据库。SQL_server2000已经在能和可扩展方面建立了世界领先的地位,是一套完全的数据库和数据分析解决方案。 另一方面,作为Microsoft公司的同一家公司的两个不同领域的产品,.net与SQL_server2000具有及其良好的接口,Ado.net中很多的数据库访问对象是专门针对SQL_server2000进行开发的,对SQL_server2000有极好的操控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值