Linux. Как запустить внешнюю программу

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение fraks » 13.01.2006 18:00:59

Надо запустить программку на линухе и вокруг нее совершить несколько телодвижений (до запуска сгенерить командную строку, после - переименовать файл и опять запустить ее же и так по кругу).

На линухе ничего не знаю, Delphi владею.
Изучать bash, perl - охоты нету.

Подскажите в сторону какой функции смотреть.
Примерчик тоже был бы очень кстати.

Хочется чего-то вроде:

Код: Выделить всё
program tt
var
 FileName: string;
 FileIndex: integer;
 CMD: string;
begin
 FileIndex := 0;
 while True do begin
   FileName := 'log.' + IntToStr(FileIndex);
   CMD := 'tcpdump -c 1000 -e -tttt -n -nn -i eth0 -l -> ' + FileName;
   Exec(CMD); {вот здесь какую функцию применить?}
   Inc(FileIndex);
 end;{while}
end.
fraks
 

Сообщение STAKANOV » 13.01.2006 18:45:54

Exec(CMD); {вот здесь какую функцию применить?}


модуль BaseUnix, функция <a href='http://www.freepascal.org/docs-html/rtl/baseunix/fpexecv.html' target='_blank'>FpExecv</a>

только обрати внимание - там запускаемая программа и аргументы в разных перемнных

хотя наверно даже лучше <a href='http://www.freepascal.org/docs-html/rtl/sysutils/executeprocess.html' target='_blank'>ExecuteProcess</a> из модуля sysutils.
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение fraks » 15.01.2006 17:55:50

хотя наверно даже лучше <a href='http://www.freepascal.org/docs-html/rtl/sysutils/executeprocess.html' target='_blank'>ExecuteProcess</a> из модуля sysutils.


Попробовал. Получается.

Но возникла загвоздка - поймать вывод запущенной программы.
Думалось что воспользуюсь простым перенаправлением вывода и потом уже с этим файлом и буду работать. Но не тут-то было.
На сколько я понял перенаправление с помощью > >> 1> 2> это функции bash и подобного, а при прямом запуске через ExecuteProcess bash тут никаким боком не участвует.

Соответственно вопрос - как в программе на FPC получить вывод StdOut запускаемой программы?
fraks
 

Сообщение fraks » 15.01.2006 18:29:50

Или как завернуть StdOut запускаемой программы в файл.
fraks
 

Сообщение fraks » 16.01.2006 06:30:16

Нашел что для контроля StdIn и StdOut запускаемого процесса можно использовать TProcess, но кол-во кода при этом превышает смысл использования FPC. Пришлось почитать про bash и реализовать нужное в 5 строк.

Всем спасибо за советы.
fraks
 

Сообщение Илья Аввакумов » 18.01.2006 10:01:55

Я всегда решеал такие вопросы с помощью скриптов. Программа на FPC их генерирует, запускает, а они делают свое дело.
...
// формируется step
Assign(f,'run.bat');
Rewrite(f);
Writeln( f, ’#!/bin/sh’ );
Writeln( f, './gulp < step > ostep');
Close(f);
Chmod('run.bat', octal(777));
Execl('./run.bat');
// анализируется ostep
Илья Аввакумов
новенький
 
Сообщения: 50
Зарегистрирован: 04.05.2005 15:06:42
Откуда: Екатеринбург

Сообщение mif » 18.01.2006 16:09:20

Program test;
uses dos;
Var
path,cmdline:string;
begin
path:='/some_path';
Readln(cmd);
exec(path,cmdline);
end.

Вот и все в линухе работает норм, как и под мелкософтом
mif
новенький
 
Сообщения: 71
Зарегистрирован: 14.12.2005 10:09:27


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Рейтинг@Mail.ru