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