# encoding: utf8 import os import random import shutil from flask import Flask, request, json import judgement import logging app = Flask(__name__) logging.basicConfig(level=logging.DEBUG) @app.route('/') def hello_world(): return 'Hello World!' ''' code: string 源代码 language: string 编程语言{cpp,java,c,python} timeLimit: int 时间限制 memoryLimit: int 内存限制 inputOutputMapping: hashmap 输入输出对 ''' @app.route('/api/judge', methods=['POST']) def judge(): requestData = request.get_data(as_text=True) data = json.loads(requestData) code = data['code'] language = data['language'] time_limit = int(data['timeLimit']) memory_limit = int(data['memoryLimit']) input_list = data['inputList'] output_list = data['outputList'] app_path = os.getcwd() rand = int(random.random() * 10000000) dir_name = 'commit-' + str(rand) while os.path.exists(dir_name): rand = rand+1 dir_name = 'commit-' + str(rand) os.mkdir(dir_name) os.chdir(app_path+'/'+dir_name) if len(input_list) != len(output_list): return {"result_list": [{'result': "System Error"}], 'message': 'test data incompleted'} td_total = len(input_list) save_test_cases(input_list, output_list, td_total) src_file = save_code(language, code) rst = judgement.judge(src_file, 'testcases', td_total, time_limit, memory_limit, language) os.chdir(app_path) shutil.rmtree(dir_name) return rst def save_test_cases(input_list, output_list, td_total): if os.path.exists('testcases'): shutil.rmtree('testcases') os.mkdir('testcases') for i in range(0, td_total): in_file = open('testcases/' + str(i) + '.in', 'w') in_file.write(input_list[i]) out_file = open('testcases/' + str(i) + '.out', 'w') out_file.write(output_list[i]) def save_code(language, code): src_file = None if language == 'c': src_file = open('main.c', 'w') elif language == 'cpp': src_file = open('main.cpp', 'w') elif language == 'java': src_file = open('Main.java', 'w') elif language == 'python': src_file = open('main.py', 'w') print(src_file.name) src_file.write(code) return src_file.name if __name__ == '__main__': app.run()