Files
2026-06-15 14:18:53 +03:00

68 lines
2.2 KiB
Python

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()