68 lines
2.2 KiB
Python
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()
|