[fpc-pascal] TProcess questions

Michael Van Canneyt michael at freepascal.org
Tue Oct 3 09:26:21 CEST 2006



On Tue, 3 Oct 2006, Adrian Maier wrote:

> Hello,
> 
> I have several questions about executing external programs with TProcess
> 
> 1.  I need to execute the following command :
>  psql -q -f /home/am/src/gfaf/hlemit_d.sql  -v D1="'1-apr-06'" -v
> D2="'1-jun-06'"
> 
> (it might not be obvious at first sight that there are both "  and  '
> enclosing those dates , because the argument must contain the '  ) .
> 
> This command works fine when executed from the bash shell.  However, it
> no longer works when executed from my pascal program (with TProcess).
> Any idea how should i quote the arguments so that they would be properly
> treated by TProcess?

You can't. The following lines (line 107 of unix/process.inc)
     Result:=StringReplace(Result,'"','',[rfReplaceAll]);
     Result:=StringReplace(Result,'''','',[rfReplaceAll]);
Will strip all quotes inside a quoted string.

Obviously, this is a bug.

> 
> 2.  Where is the TProcess documented on the freepascal website? I had
> found a FCL.pdf  some time ago , but I am unable to find that doc on the
> freepascal website.

It is not documented currently. It's scheduled as the next unit to be
documented.

> 
> 3.  The code returned by the called program can be got with
> TProcess.ExitCode , right ?   I have a situation in which a program  1
> , but  TProcess.ExitCode is 0.   Therefore it's impossible to detect
> the failure.

That can be if the program exited because of a signal.

Michael.



More information about the fpc-pascal mailing list