Как реализовать на Django онлайн-компилятор?

Разрабатываю проект онлайн обучения методам шифрования. Необходимо приложение, которое получает файл исходника *.cpp от пользователя, на сервере компилирует, проверяет правильность задания по заготовленным тестам и, если результат пользователя совпадает с эталонным результатом, возвращает сообщение об успехе.
Ломаю голову который день, но адекватной и нормально работающей реализации так и не пришло в голову.
  • Вопрос задан
  • 716 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Beltoev
Живу в своё удовольствие
Когда я подобную задачу решал (правда, десктопная программа для тестирования была, но не суть), то делал примерно по следующему алгоритму:
  1. Принимал от пользователя исходный код
  2. Сохранял его во временный файл (*.cpp)
  3. Этот файл уже отдавал компилятору MinGW, лежащему рядом с программой тестирования (запускал компилятор, аргументом при запуске был путь к временному файлу)
  4. Попутно перенаправлял вывод компилятора в поток, из которого считывал результат
  5. Если всё ок - сверялся с эталонными результатами вывода
  6. Если есть ошибки при компиляции - просто отдавал их пользователю
  7. Удалял временный файл


В вашем случае нужен будет выделенный сервер (желательно отдельно от основного сайта, чтобы, в случае какой уязвимости, пользователь не мог получить доступа к сайту тестирования), с которым бы сайт общался по API: сайт отправляет серверу файл, а тот в ответ шлет результат компиляции. Если все ок, то статус успешности и результат вывода, иначе - ошибку и комментарий компилятора.
Ответ написан
Комментировать
Можно же общаться с бинарником и компилятором через пайпы (os.popen). Для бинарника в целях безопасности сделать chroot.
Ответ написан
Rou1997
@Rou1997
Купите VPS, и просто установите на него любой компилятор, вообще любую программу, что пожелаете, вполне адекватный вариант.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы