Задать вопрос

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

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


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

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽
Крона Лабс Екатеринбург
от 200 000 ₽