Terry A. Haimann
Tue, 16 Mar 2010 16:06:08 -0700
Ok, I have a Lazarus test program that has the following code: procedure TMainForm.ExecButClick(Sender: TObject); Var StdStrLst, ErrorStrLst: TStringList; MyProcess: TProcess; begin StdStrLst := TStringlist.Create; ErrorStrLst := TStringlist.Create; MyProcess := TProcess.Create(nil); MyProcess.CommandLine := 'at -m ' + TimeEdit.Text; MyProcess.Options := MyProcess.Options + [poUsePipes]; MyProcess.Execute; StdStrLst.Clear; StdStrLst.Add(CmdEdit.Text); StdStrLst.SaveToStream(MyProcess.Input); StdStrLst.Clear; StdStrLst.Add(chr(4)); StdStrLst.SaveToStream(MyProcess.Input); StdStrLst.Destroy; ErrorStrLst.Destroy; MyProcess.Destroy; end;This program seems to submit commands to the At Facility without any issues. They will even run invalid commands and return error messages in the mail command.
Virtually the same logic in a fpc program doesn't work. The program runs, but nothing is submitted to the "AT" facility. I am suspecting something is requiring one of the libraries in Lazarus that I can't seem to get to compile in fpc such as fileutil, LResources or maybe Controls. But I may be missing something else. Something could be going on with the pipes that I don't understand. I don't know of a way to monitor the pipes or the "AT" Facility to see what is going on. I am running FC10-64
program TestPrg; Uses Classes, Process, SysUtils;// Uses Classes, SysUtils, fileutil, LResources, Forms, Controls, Graphics, Dialogs,
// StdCtrls, Process; Var i: Integer; Cmd, Pre, Post, StrVar, SwStr: String; MyProcess: TProcess; SOut, EOut, StdStrLst: TStringList; Begin StdStrLst := TStringlist.Create; SOut := TStringlist.Create; EOut := TStringlist.Create; MyProcess := TProcess.Create(nil); MyProcess.CommandLine := 'at -m now'; MyProcess.Options := MyProcess.Options + [poUsePipes]; MyProcess.Execute; StdStrLst.Clear;StdStrLst.Add('awk -F":" ''{print $1"\t"$3"\t"$4}'' /etc/passwd | sort > /home/terry/Documents/fpc/CommandProg/Output.txt');
StdStrLst.SaveToStream(MyProcess.Input);
StdStrLst.Clear;
StdStrLst.Add(chr(4));
StdStrLst.SaveToStream(MyProcess.Input);
SOut.LoadFromStream(MyProcess.Output);
For i:=1 to SOut.Count Do
WriteLn(SOut.Strings[i]);
EOut.LoadFromStream(MyProcess.StdErr);
For i:=1 to EOut.Count Do
WriteLn(EOut.Strings[i]);
End.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal