import sqlite3 from pathlib import Path import os import shutil import subprocess ROOT_DIR = Path(__file__).resolve().parent MEDIA_DIR = os.path.join(ROOT_DIR,'media') TEMP_DIR = os.path.join(ROOT_DIR,'temp') con = sqlite3.connect("db.sqlite3") cur = con.cursor() k=0 while k<3: k+=1 res = cur.execute('''SELECT id,Problem_id,SrcFile FROM check_problem_resolvs WHERE Status='0';''') res = res.fetchone() if not res: break id = res[0] p_id = res[1] file_path = os.path.join(MEDIA_DIR,res[2]) file_ext =file_path[file_path.rindex('.')+1:] if file_ext == 'py': rt_dir = os.path.join(TEMP_DIR,str(id)) if not os.path.exists(rt_dir): os.mkdir(rt_dir) shutil.copy(file_path, rt_dir+'\\resolv.py') res = cur.execute(f'''SELECT id,Input,Output FROM check_problem_tests WHERE Problem_id={p_id}''') rows = res.fetchall() status = 2 message='Все хорошо' for row in rows: with open(rt_dir+'\\INPUT.TXT','w') as f: f.write(row[1]) try: proc = subprocess.call(f"python {rt_dir}\\resolv.py", cwd=rt_dir, timeout=5) except: status = 3 message = "Выбили по таймауту" break if os.path.exists(rt_dir+'\\OUTPUT.TXT'): with open(rt_dir+'\\OUTPUT.TXT','r') as f: if f.read() != row[2]: status = 3 message='Решение не верно' break else: status = 3 message = "Нет выходного файла" break cur.execute(f'''UPDATE check_problem_resolvs SET Status='{status}', Message='{message}' WHERE id='{id}';''') con.commit() else: cur.execute(f'''UPDATE check_problem_resolvs SET Status='9' WHERE id='{id}';''') con.commit() con.close()