[fpc-devel] TProcess and redirection of StdIn/Out (e.g. from/to files)

Michael Van Canneyt michael at freepascal.org
Thu Dec 14 18:06:06 CET 2023



On Thu, 14 Dec 2023, Martin Frb via fpc-devel wrote:

> If I am right the TProcess currently does not allow redirection of StdOut/In 
> to/from a file (or other handle provided).
>
> If it does, and I have been missing the "how to", then please enlighten me 
> and disregard the remainder of the mail.

It does not exist out in the open :-)

>
>
> The code for setting up redirection to pipes (to be read/write by the parent 
> process) already exists. So this is mainly a call to add properties to 
> explicitly set those handles.
> Or provide some other method.
>
> Is this something that should be added? (I.e. a feature request to be added)
> If yes, should there just be 3 properties for the handles? A callback to 
> create/provide them? A virtual method?
> Should there be a flag?

Actually, I already started an implementation of an extension half a year ago.
(although I have the design in mind since several years. Time constraints...)

It's nearly finished, there are still some corner cases that need testing.

The idea is a property of type TIODescriptor (reduced code for readability):

TIOType = (iotNone,iotPipe,iotFIle,iotHandle,iotProcess);

TIODescriptor = class(Tpersistent)
Public
   Property Handle : THandle;
Published
   property IOType: TIOType;
   property FileName : string;
   property OnGetHandle : TGetHandleEvent;
   property Process : TProcess; 
end;

uses as

TProcess = Class()
// ...
Published
   Property InputDescriptor : TIODescriptor;
   Property OutputDescriptor : TIODescriptor;
   Property ErrorDescriptor : TIODescriptor;
end;

>
> What should be the resolving order if handles are give, but other flags 
> (pipes/input) are set?

Backwards compatibility first and foremost. Setting the poUsePipes option
switches all descriptors to IOType = iotPipe.

I'll see if I can finish the implementation ASAP.

Michael.



More information about the fpc-devel mailing list