MyProcess := TProcess.Create(NIL);
MyProcess.Executable := 'project1'; // the program with the "GetStdIn" function
MyProcess.Options := MyProcess.Options + [poPassInput, poUsePipes];
MyProcess.Execute;
mystring := 'Hello Lazarus';
MyProcess.Input.Write(mystring[1], Length(mystring));
MyProcess.CloseInput; // does not trigger EOF?!
// NumBytesAvailable is always 0 for output and stderr
while MyProcess.Running or (MyProcess.Output.NumBytesAvailable > 0) or
(MyProcess.Stderr.NumBytesAvailable > 0) do
begin
while MyProcess.Output.NumBytesAvailable > 0 do
begin
ReadCount := Min(512, MyProcess.Output.NumBytesAvailable); //Read up to buffer, not more
MyProcess.Output.Read(CharBuffer, ReadCount);
end;
while MyProcess.Stderr.NumBytesAvailable > 0 do
begin
ReadCount := Min(512, MyProcess.Stderr.NumBytesAvailable); //Read up to buffer, not more
MyProcess.Stderr.Read(CharBuffer, ReadCount);
end;
end;
MyProcess.Free;