def main(CONFIG): arr = [] for i in range(CONFIG.count): [status, error] = run (i, CONFIG) arr.append(status) if error: break; update.status ('END', SUBID, status) return arr
def run (testnum, CONFIG): [TIMELIM, MEMLIM] = CONFIG.get_limits(testnum) INPUT_COMMAND = CONFIG.input_command(testnum) update.status ('RUN', SUBID, -1, testnum) stdin = os.popen (JAILER + ' ' + str (testnum) + ' ' + str(TIMELIM) + ' ' + INPUT_COMMAND , 'r') status = time = mem = ret = score = -1 while True: line = stdin.readline() if not line: break result = line.strip().split(' ') if result[0].isdigit(): score = int (result[0]) elif result[0] == "result": time = float (result[1]) mem = int (result[2]) ret = int (result[3]) if ret > 127: status = 6 + ret - 128 # signal elif ret > 124: status = 5 # unexpected elif ret == 124: status = 2 # time elif ret != 0: status = 4 # runtime elif mem > MEMLIM: status = 3 # memory elif time > TIMELIM: status = 2 # time elif score <= 0: status = 1 # wrong else: status = 0 # correct os.system(LOGGER + " LOG error {0} {1} {2} {3} {4} {5} {6}".format(SUBID, status, testnum, time, mem, ret, score)) error = update.status ('RUN', SUBID, status, testnum) return [status, error]
# Reading user's code options from env USER = os.getenv("USER") SUBID = os.getenv("SUBID") PROBLEM = os.getenv("PROBLEM") LANGUAGE = os.getenv('LANGUAGE') # Reading problem specific options from problem config CONFIG = config.parse() # Initializing log prefix = SUBID + ':' + USER + ':' + PROBLEM + ':' + LANGUAGE + ': ' logmsg = '' # Start compiling update.status ('COMPILE', SUBID, -1) compret = os.system (COMPILER + ' ' + LANGUAGE) compret /= 256 update.status ('COMPILE', SUBID, compret) if compret == 124: # Compile time limit exceeded, refer to Gnu timeout manual logmsg = 'Compile time limit exceeded' elif compret: # Unspecified Compilation error logmsg = 'Compilation error' else: # Start running update.status ('RUN', SUBID, -1, -1); arr = run.main (CONFIG) charstat = 'CWTMRU' # [ correct, wrong, time, memory, runtime, unexpected ]