On Tue, 27 Jan 2026, Bart via fpc-devel wrote:

On Tue, Jan 27, 2026 at 9:44 AM Aruna Hewapathirane via fpc-devel
<[email protected]> wrote:


The attached screenshot shows the issue I’m running into with the displayed 
output. I’m clearly missing something fundamental here, and I’d appreciate any 
pointers in the right direction.

What happens if you output the Result to a file?

I use similar code (allbeit in a Lazarus program), I use
LoadFromStream(Proc.Output) instead of your CopyFrom(), not sure if
that matters.

It does.

1. Do not use CopyFrom on a non-seekable stream such as a pipe (which is used 
to capture output in TProcess).
   this is documented: 
https://www.freepascal.org/docs-html/rtl/classes/tstream.copyfrom.html

2. Do not use the poWaitOnExit flag. When the program you start outputs more
   data then the size of the OS pipe buffer then it will be blocked waiting for
   you to free the pipe buffer, while you wait for it to finish.

Instead, do a loop:

  ...
  Proc.Options := Proc.Options + [poUsePipes]-[poWaitOnExit];
  Proc.Execute;
  While Proc.Running do
    begin
    nBytesRead:=Proc.Output.Read(Buffer,SizeOf(Buffer);
    S.WriteBuffer(Buffer,BytesRead);
    end;
  // Read remaining
  nBytesRead:=proc.Output.Read(Buffer,SizeOf(Buffer);
  S.WriteBuffer(Buffer,BytesRead);
  // ...
  // Check exit status and further processing

Michael.
_______________________________________________
fpc-devel maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to