Capture console output

Capture console output

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Opet ja sa mojim problemima. Ovaj put pokusavam da uhvatim poruke koje mi ispisuje aplikacija u konzoli i da doticne vratim u recimo Memo komponentu. Problem je sto je program koji se izvrsava u konzoli ustvari linux program kompajliran na Cygwinu. Neke rezultate sam vec ostvario, tj. kada konsolni program odradi svoje ja dobijem poruke koje je ispisao na ekranu u mojoj Memo komponenti (za to vreme se konzola ne vidi). Medjutim, poruke dobijem tek na kraju, sve odjednom, a ne periodicno kako se one ustvari pojavljuju na ekranu.

Evo koda koji sam koristio:
procedure TConsoleForm.RunCaptured(DosApp : string;AMemo : TMemo); const   ReadBuffer = 1048576;  // 1 MB Buffer var   Security            : TSecurityAttributes;   ReadPipe,WritePipe  : THandle;   start               : TStartUpInfo;   ProcessInfo         : TProcessInformation;   Buffer              : Pchar;   TotalBytesRead,   BytesRead           : DWORD;   Apprunning,n,   BytesLeftThisMessage,   TotalBytesAvail : integer; begin   with Security do   begin     nlength              := SizeOf(TSecurityAttributes);     binherithandle       := true;     lpsecuritydescriptor := nil;   end;   if CreatePipe (ReadPipe, WritePipe, @Security, 0) then   begin     Buffer  := AllocMem(ReadBuffer + 1);     FillChar(Start,Sizeof(Start),#0);     start.cb          := SizeOf(start);     start.hStdOutput  := WritePipe;     start.hStdInput   := ReadPipe;     start.dwFlags     := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;     start.wShowWindow := SW_HIDE;     if CreateProcess(nil      ,PChar(DosApp),                      @Security,@Security,                      true     ,CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS,                      nil      ,nil,                      start    ,ProcessInfo) then     begin       n:=0;       TotalBytesRead:=0;       repeat         Inc(n,1);                   Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);         Application.ProcessMessages;         if not PeekNamedPipe(ReadPipe        ,@Buffer[TotalBytesRead],                              ReadBuffer      ,@BytesRead,                              @TotalBytesAvail,@BytesLeftThisMessage) then break         else if BytesRead > 0 then           ReadFile(ReadPipe,Buffer[TotalBytesRead],BytesRead,BytesRead,nil);         TotalBytesRead:=TotalBytesRead+BytesRead;       until (Apprunning <> WAIT_TIMEOUT) or (n > 150) ;       Buffer[TotalBytesRead]:= #0;       OemToChar(Buffer,Buffer);       AMemo.Text := AMemo.text + StrPas(Buffer);     end;     FreeMem(Buffer);     CloseHandle(ProcessInfo.hProcess);     CloseHandle(ProcessInfo.hThread);     CloseHandle(ReadPipe);     CloseHandle(WritePipe);   end; Memo1.Text := AnsiReplaceStr(Memo1.Text, chr(10), (chr(13) + chr(10))); end; end.

Zadnja linija mi pretvara Linuxov kraj linije u Windowsow (CR > CR/LF).

Jel moze neko da mi pomogne da nateram ovo cudo da mi pokazuje poruke onda kada se pojave a ne tek na kraju?
Mislim da je problem bas u CR <=> CR/LF razlici.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 1123 korisnika na forumu :: 65 registrovanih, 9 sakrivenih i 1049 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: AleksandarV, alternator, avijacija, bestguarder, Black Luster Soldier, Bobrock1, Bojan198527, bufanje, cifra, deLacy, Denaya, Dimitrije Paunovic, Dioniss, Djokkinen, Djole3621, draganl, Duh sa sekirom, Gall, geo.dule, Hitri, interesujeme, Jakonjveliki, kolle.the.kid, Kubovac, kubura91, marko308, MarkoJ-Nis, Matija, mercedesamg, Mercury, Milan A. Nikolic, milenko crazy north, milimoj, Misirac, Mrav Obrad, N.e.m.a.nj.a., Novakomp, novator, nuki1234, operniki, opt1, Panter, Penzula, Peruta, Posmatrac77OKB, probisic, sap, saputnik plavetnila, sevenino, Singidunumac, Sirius, Sićko, skvara, Smajser, Stoilkovic, synergia, TRZH92, Tvrtko I, vathra, vladas87, vrag81, zdrebac, zeka013, Zorge, Zuna77