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@lists.freepascal.org > http://lists.freepascal.org/mailman/listinfo/fpc-pascal > _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal