проверяемую программу,
подать на вход параметры из тестовых данных и
записать вывод в виде:
»»тестовые данные
»»соотв. вывод.
известно ли готовое решение?
Если нет - где искать подсказки?
Подсказки искать в уточнении постановки задачи. Что значит "подать на вход"?
что за программы проверяются? если консольные, то program.exe < файл.txt > выхлоп.txt
Запустить в консоли с параметрами.
Где брать program.exe? возможно не правильно понял... идея в том, чтобы одну и ту же программу (и множество разных) протестить на допустимых, недопустимых значениях ввода. причем на нескольких сериях вводных данных.... идея: TesterProgram.exe (консольная) readln (fTestData); //TestData.txt readln (sProgramName); // While not EOF (fTestData) run (sProgramName, fTestData, sOutputFile);
как собираешься на вход параметры давать? Путь в параметрах файла, или выбор из меню внутри программы?
Внутри программы объявить: program MyProgram(<params><var s:string>); в теле программы - разпарсить s на значения переменных.
Человек написал о перенаправлении стандартного ввода-вывода. Для этого не нужна отдельная программа.
procedure TFormMain.HandleOutput(const AText: string); begin Log('> %s', [AText]); end; ... JclSysUtils.Execute(cmd_str, HandleOutput); если надо генерить на лету в stdin запущеной дочерней программы, то надо смотреть иные решения - через пайпы. вроде выше обсуждали. возможно в TJvCreateProcess есть отправка данных в инпут чилда
Там же прямо в сообщении пример дан. Тебе надо через stdin файл запихать? Тогда через ">"
Да, верно, через > stdout.
Правильно понимаю, что JclSysUtils.Execute(cmd_str, HandleOutput); cmd_str - переменная, через которую отправка параметров HandleOutput - переменная в которую сбор вывода? соответственно - в цикле while not EOF("fTestData.txt") do begin JclSysUtils.Execute(cmd_str, HandleOutput); Writeln('Diagnostics.txt', cmd_str); Writeln('Diagnostics.txt', HandleOutput); end; ????
Там шла речь о запуске из консоли, без написания дополнительной программы. Из вашего описания не следует необходимости написания софта.
Возможно не не следует. В т.ч. для профи - легче пару строк кода добавить, потом закомментить и удалить. - поскольку достаточно легко каждый раз понять что и куда. Для любителя - легче однажды сделать внешнюю прогу с инструкцией и пользовать при потребности с промежутком в 2-5-10 лет.
оказалось дело не в TJvCreateProcess а в тестовой программе, которая даже при перенаправлении из комстроки в файл - продолжает буферизировать вывод по 128 байт. {$APPTYPE CONSOLE} var s: string; begin repeat Readln(Input, s); Writeln(Output, '{', s, '}'); Writeln(ErrOutput, '[', s, ']'); until False; end.
Flush в помощь
Обсуждают сегодня