Pipes в Linux

Вопросы программирования и использования среды Lazarus.

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

Pipes в Linux

Сообщение dionic » 18.03.2010 15:05:17

Привет всем! Народ подскажите что я не так делаю. Ну никак не могу заставить работать pipes в linux... Вот код программы, которая просто запускает другую и передаёт ей по pipe строку, а консоль её отвечает тоже строкой...

Код: Выделить всё
// процедура нажатия на кнопку вызова консольной проги
procedure TForm1.Button2Click(Sender: TObject);
var i   : integer;
    str : ansistring;
begin
MyProc:= TProcess.Create(nil);
MyProc.CommandLine:='/media/DATA/MyWork/Test_projects/TProcess/ApplCl/project1';
//MyProc.CommandLine:='D:\MyWork\Test_projects\TProcess\ApplCl\project1.exe';
MyProc.Options:= MyProc.Options + [poUsePipes,poNewConsole];
MyProc.Execute;
MyProc.input.WriteAnsiString('Helffflo');

while MyProc.Running do begin
  if MyProc.Output.NumBytesAvailable > 0 then
   str:=MyProc.Output.ReadAnsiString;
end;

form1.Memo1.Lines.Add(str);
MyProc.Free;
end;         


// а это тело процедуры консольного приложения
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
  sIn  : TInputPipeStream;
  sOut : TOutputPipeStream;
  inMsg  : ansistring;
  outMsg : ansistring;

begin
  try
   sIn := TInputPipeStream.Create(StdInputHandle);
   sOut:= TOutputPipeStream.Create(StdOutputHandle);

   inMsg:= sIn.ReadAnsiString;

   if inMsg = 'Hello' then
    outMsg:= 'Hello my friend'
   else
    outMsg:= 'What you say, my friend?';

   sOut.WriteAnsiString(outMsg);

   Terminate;
  finally
   FreeandNil(sIn);
   FreeandNil(sOut);
  end;
end;



Самое интересное , что в винде всё работает. А вот в linux ну никак не хочет принимать строку, а просто висит и всё...
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08

Re: Pipes в Linux

Сообщение wolker » 18.03.2010 16:50:09

Попробуй использовать FpSystem или Shell
wolker
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.02.2009 22:54:45

Re: Pipes в Linux

Сообщение coyot.rush » 18.03.2010 18:01:56

Тема перехвата консольного вывода поднималась уже не раз. Но судя по всему TProcess по прежнему "глючный" под Linux.
Поиск рулит :D
Перехват консольного вывода (Linux) http://www.freepascal.ru/forum/viewtopic.php?f=11&t=5356
Лучше так, имхо, запускать чужие приложения
Код: Выделить всё
uses libc;
....
libc.system(Pchar('free'))


Добавлено спустя 5 минут 35 секунд:
Ищете forkpty 8)
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Pipes в Linux

Сообщение dionic » 19.03.2010 08:50:44

Ну всё немного хоть прояснилось. Попробовал вместо poNewConsole поставить poNoConsole и всё заработало...
Всем кто ответил спасибо.=)
dionic
новенький
 
Сообщения: 90
Зарегистрирован: 17.06.2009 21:00:08


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 41

Рейтинг@Mail.ru