Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Maverich - Giugno 05, 2012, 05:58:08 pm

Titolo: esecuzione comandi con TProcess
Inserito da: Maverich - Giugno 05, 2012, 05:58:08 pm
riesco ad eseguire programmi esterni anche con parametri,
ma non riesco proprio a fargli accettare which soffice (in LInux mi restituisce il path di soffice)

procedure TForm1.AvviaProgramma;
var AProcess: TProcess;
    sDocumento, sPath: string;
begin
   AProcess := TProcess.Create(nil);

    sDocumento := '"/home/test/documenti/esito.txt"':

     AProcess.CommandLine := '"/usr/lib/which soffice"';


    //wich da solo lo esegue , ma non serve a niente
     //AProcess.CommandLine := '"/usr/lib/which"';




    AProcess.Execute;
    AProcess.Free;
end;
Titolo: Re:esecuzione comandi con TProcess
Inserito da: nomorelogic - Giugno 05, 2012, 06:38:45 pm
metti su un form: 1 TButton, 1 TMemo ed 1 TEdit
poi prova questo codice (funziona su fpc 2.6.1):


Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
var AProcess: TProcess;
    Buffer: array[0..127] of char;
    ReadCount: Integer;
    ReadSize: Integer;
    sOut: string;
    i: integer;
begin

  try
   AProcess := TProcess.Create(nil);
   AProcess.CommandLine := 'which ' + Edit1.Text;
   AProcess.Options := AProcess.Options + [poUsePipes, poStderrToOutPut];
   AProcess.Execute;

   while AProcess.Running or (AProcess.Output.NumBytesAvailable > 0) do
   begin
     if AProcess.Output.NumBytesAvailable > 0 then
     begin
        sOut := '';
        ReadSize := AProcess.Output.NumBytesAvailable;
        if ReadSize > SizeOf(Buffer) then
           ReadSize := SizeOf(Buffer);
        ReadCount := AProcess.Output.Read(Buffer[0], ReadSize);

        for i := 0 to ReadCount do
           sOut := sOut + Buffer[i];
        Memo1.Lines.Add(sOut);
     end;
   end;

  finally
    AProcess.Free;
  end;           
Titolo: Re:esecuzione comandi con TProcess
Inserito da: Maverich - Giugno 06, 2012, 09:47:32 am
funziona su f.p.c. 2.7.1;

devo dire che non conoscevo TProcess e le sue possibilita'.

grazie, ho imparato qualcosa che potra' tornarmi utile.
Titolo: Re:esecuzione comandi con TProcess
Inserito da: nomorelogic - Giugno 07, 2012, 09:35:04 am
in effetti anche io con l'occasione ho scoperto come far funzionare il discorso dello stdout ;)
puņ veramente essere utile la cosa