Am 02.02.2012 12:00, schrieb [email protected]:
Hi, I need run 3 external program and redirected output: first | second | third

For example:
    df -hT | grep -v -E 'tmpfs|ecryptfs' | grep 'sda2'
it gives
    /dev/sda2     ext4     19G   11G  7,6G  58% /

I use this 
http://wiki.lazarus.freepascal.org/Executing_External_Programs#How_to_redirect_output_with_TProcess
 sample code. It works fine for  first | second.

Completely different solution: Why do you need to run three processes at all? Just get the output of "df -hT" and then search the corresponding strings using a for loop...

e.g.

function GetDFOfSda2: String;
var
  slist: TStringList;
  s: String;
begin
  slist := TStringList.Create;
  try
GetOutputOfProcess('df', ['-hT'], slist); // hypothetic function that returns the output of a process in a TStringList
    for s in slist do begin
      if (Pos('tmpfs', s) = 0) and (Pos('ecryptfs', s) = 0) then
        Continue;
      if Pos('sda2', s) > 0 then
        Exit(s);
    end;
  finally
    slist.Free;
  end;
end.

Of course this can be improved by using regular expressions and setting the drive to look for through a parameter, but it should show you the basic concept. :)

Regards,
Sven

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to