在线云评测系统日志(九):进行代码的编译
来源:互联网 发布:漫画本子在淘宝怎么搜 编辑:程序博客网 时间:2024/06/11 11:57
不同的语言执行不同的代码编译命令。
代码编译成功后进行子程序的判断运行。
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
- 在线云评测系统日志(九):进行代码的编译
- 在线云评测系统日志(十):获取输入文件的评测数据进行程序评测
- 在线云评测系统日志九
- 在线云评测系统日志(八):将代码写入本地文件并进行安全性检测
- 在线云评测系统日志(七):后台从数据库中取出待评测代码
- 在线云评测系统日志(六):后台评测系统的架构
- 在线云评测系统日志(十一):对输出结果进行评判
- 在线云评测系统日志(四):在线编辑器的实现
- 在线云评测系统日志(十二):杂项
- 在线云评测系统日志二
- 在线云评测系统日志一
- 在线云评测系统日志三
- 在线云评测系统日志四
- 在线云评测系统日志五
- 在线云评测系统日志六
- 在线云评测系统日志七
- 在线云评测系统日志八
- 在线云评测系统日志十
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- Linux扩展根目录下的空间
- 向上转型和向下转型
- [转载链接]五大常用算法之一:分治法
- 基于App-Hub实现微应用架构
- 在线云评测系统日志(九):进行代码的编译
- Makefile编译文件
- 静态分派和动态分派
- Android build error on Ubuntu 16.04 LTS
- aircrack-ng/airdrop-ng
- 【linux 命令】Linux 下常用压缩文件的解压、压缩
- 一道关于fork和printf的面试题
- Opencv数据结构Mat详解
- HDU5461-思维