# jupyter评测执行脚本 #!/usr/bin/python3 # -*- coding:utf-8 -*- from pickle import TRUE from re import I import re from tkinter.messagebox import RETRY from click import command from pathlib import Path import sys import base64 import os import json import subprocess class Evalute: def __init__(self,input,jupyter_file,timeout): try: f = open(jupyter_file) f.close() except FileNotFoundError: print("Error: 没有找到文件 %s,%s",jupyter_file) else: #存在 self.encode_input = input self.jupyter_file = jupyter_file self.decode_input = self.decode_case(input) self.timeout = timeout #解析测试集 def decode_case(self,input): input_list = [] if input == "IA==": input_list.append(input) else: #判断整个base64是否包含逗号,若包含则切割,不包含则解析返回 if input.find(",") != -1: input_list = [] input_list = input.split(",") else: input_list.append(input) return input_list #检查测试集是否为空 def check_input_is_null(self): #假设无测试集的情况是空格 if self.decode_input[0] == "IA==": return True return False #初始化,生成执行命令列表 def init(self): self.cmd_list = [] if self.check_input_is_null() == False: for param in self.decode_input: str = "echo \"" + param + "\" | base64 -d |" + "/usr/bin/python3.6 " + self.jupyter_file + " 2>&1 | base64" self.cmd_list.append(str) if self.check_input_is_null() == True: str = "/usr/bin/python3 " + self.jupyter_file + " 2>&1 |base64" self.cmd_list.append(str) return #执行评测并保存结果返回列表 def run(self): #评测结果 self.eva_result = "" r = [] eva_result_direct = {} eva_result_direct["compileResult"] = "Y29tcGlsZSBzdWNjZXNzZnVsbHk" for num in self.cmd_list: ret = os.popen(num,'r').read() r.append(ret) eva_result_direct["out"] = r self.eva_result = json.dumps(eva_result_direct, ensure_ascii=False) # 脚本只做结果输出 def print_console(self): print(self.eva_result) return #开始评测 def start(self): #评测初始化 self.init() #执行存结果 self.run() #输出结果到console self.print_console() if __name__ == '__main__': # 参数:测试集每组以逗号分隔base64编码;jupyter源代码路径;timeout; a = Evalute(sys.argv[1],sys.argv[2],sys.argv[3]) a.start()