[fpc-pascal] Interactive process with TProcess

Michael Van Canneyt michael at freepascal.org
Tue Dec 16 09:49:28 CET 2008



On Tue, 16 Dec 2008, leledumbo wrote:

> 
> OK, since no one answers this in Lazarus forum, I'll ask here as it's more
> FPC (FCL, actually) related than LCL. I want to create an interactive
> process, so I need to read the output as soon as it's available and write it
> to the screen (or somewhere else). Here's the partial code (a little
> different from the original post to avoid visual component):

And what is the question ?

Michael.

 
> var
>   CmdProcess: TProcess;
>   MemStr: TMemoryStream;
>   StrList: TStringList;
>   n: Integer;
>   ErrMsg: PChar;
> begin
>   try
>     CmdProcess:=TProcess.Create(nil);
>     MemStr:=TMemoryStream.Create;
>     StrList:=TStringList.Create;
>     MemStr.SetSize(READ_BYTES);
>     with CmdProcess do begin
>       CommandLine:=InputStr;
>       Options:=[poUsePipes,poStderrToOutPut];
>       ShowWindow:=swoHide;
>       Execute;
>       while Running do begin
>         n:=Output.Read(MemStr.Memory^,READ_BYTES);
>         if n>0 then begin
>           StrList.LoadFromStream(MemStr);
>           WriteLn(StrList.Text); 
>           MemStr.Clear;
>         end else
>           Sleep(100);
>       end;
>     end;
>   except
>     on e: EProcess do begin
>       {$IFDEF Windows}
>       FormatMessage(
>         FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
>         nil,GetLastError,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
>         @ErrMsg,0,nil
>       );
>       {$ELSE}
>       ErrMsg:=@e.Message[1];
>       {$ENDIF}
>       WriteLn(ErrMsg);
>       Exit;
>     end;
>   on e: Exception do begin
>       MessageDlg('Error',e.Message,mtError,[mbOK],0);
>       Exit;
>     end;
>   end;
>   repeat
>     n:=CmdProcess.Output.Read(MemStr.Memory^,READ_BYTES);
>     if n>0 then begin
>       StrList.LoadFromStream(MemStr);
>       WriteLn(StrList.Text);
>     end;
>   until n<=0;
>   StrList.Free;
>   MemStr.Free;
>   CmdProcess.Free; 
> end;
> 
> -- 
> View this message in context: http://www.nabble.com/Interactive-process-with-TProcess-tp21029222p21029222.html
> Sent from the Free Pascal - General mailing list archive at Nabble.com.
> 
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
> 



More information about the fpc-pascal mailing list