У меня есть список входных файлов и ожидаемый выходной файл, я хочу написать автогрейдер, который выполняет работу по приему программы python, запускает ее на входных файлах, и сравнивая его вывод с выходным файлом. Подход, который я использовал, состоит в том, чтобы использовать модуль python для запуска программы с использованием os.system('python program.py > actual.out')
, а затем выполнить разницу между выходом и expect.out снова с помощью os.system().Стратегия тестирования python для разработки и автогрейдера
Проблема, с которой я сейчас сталкиваюсь, - это чтение ввода из файла, потому что программа, которая указана, читается с консоли. Итак, как мне перенаправить входные данные из файла таким образом, чтобы он читался sys.stdin в program.py.
import os
def grade(program_py_file_handler,input_dir,output_dir):
#create temporary file for program.py using program_py_file_handler
#one by one read all files from input_dir
#run program.py using os.system generating a temp file
#do diff be temp file and expected file
Есть ли лучший способ выполнить diff без использования команды diff?
Чтобы перенаправить вывод из program.py в файл, я использовал python program.py>tem.out
. Какой эквивалент я должен использовать для перенаправления входного файла на progam.py, так что везде, где я использовал sys.stdin в program.py, он будет вместо этого читать из переданного файла? (Модификация program.py не является опцией.)
Где код, который вы пробовали? – pzp