TProcces output nicht lesbar [gelöst]

Rund um die LCL und andere Komponenten
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TProcces output nicht lesbar

Beitrag von mse »

Nur so zum Vergleich, in MSEgui würde das Auflisten der Prozessausgabe mittels twidgetgrid und tterminal so realisiert:

Code: Alles auswählen

tterminal1.execprog(
  'avr-gcc -mmcu=atmega32 -mcall-prologues -Wall -O0 -DF_CPU=16000000UL '+
  '-c main.c -o main.o');

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: TProcces output nicht lesbar

Beitrag von corpsman »

@socke,

Ohne Deine Syntaxfehler ergibt sich somit diese Version :

Code: Alles auswählen

Function ExecuteCommand(App, Param, logname: String): String;
Var
  AProcess: TProcess;
  sl: TStringList;
Begin
  // Entnommen aus  : http://wiki.lazarus.freepascal.org/Executing_External_Programs/de#Ein_verbessertes_Beispiel" onclick="window.open(this.href);return false;
  AProcess := TProcess.Create(Nil);
  AProcess.CommandLine := 'bash -c "' + app + ' ' + param + ' >' + logname + ' 2>&1"';
  AProcess.Options := AProcess.Options + [poNoConsole, poWaitOnExit];
  AProcess.Execute;
  AProcess.Free;
  // Auslesen der Logfile
  sl := TStringList.create;
  sl.LoadFromFile(logname);
  result := sl.text;
  sl.free;
End;
Funktioniert ebenfalls und ist mir dank des Verzichts der Skriptfile und fpChmod deutlich sympathischer..
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TProcces output nicht lesbar

Beitrag von Socke »

corpsman hat geschrieben:Ohne Deine Syntaxfehler
.. hab's mal korrigiert; das war nur schnell zusammenkopiert und mit ein wenig VBA-Syntax gemischt :oops:
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: TProcces output nicht lesbar

Beitrag von Bora4d »

Bei meinem Linux-Konsolenprogramm funktionierte das auch nicht. Die Lösung war konvertieren von AProcess.Output zu UTF8 ich habe soetwas gemacht:

Code: Alles auswählen

....
 var Buffer: string;
    BytesAvailable: DWord;
    BytesRead:LongInt;
begin
   ...
  AProcess.Execute;
  BytesAvailable := Process.Output.NumBytesAvailable;
  BytesRead := 0;
  while BytesAvailable>0 do begin
     SetLength(Buffer, BytesAvailable);
      BytesRead := AProcess.OutPut.Read(Buffer[1], BytesAvailable);
 
      Memo1.Text := Memo1.Text + UTF8Encode(Buffer);   
                        //früher anstatt UTF8... das verwendet copy(Buffer,1, BytesRead);
                        //aber dann hat Memo1 nichts gezeigt
 
      BytesAvailable := AProcess.Output.NumBytesAvailable;
   end;
 
  //memo scrollen
   if BytesRead>0 then begin Application.ProcessMessages; Memo1.SelStart := Length(Memo1.Text); end;  
   ...
end;
Edit:
Das Programm selber stammt von Lazarus Beispiel. Ich habe nur für mich angepasst.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: TProcces output nicht lesbar

Beitrag von corpsman »

@Bora4d
Deine Losung ist mir nicht ganz Klar, Linux arbeitet eh schon in UTF8 wieso also konvertieren ? Bei mir hilft sie aber definitiv nicht, denn Process.Output.NumBytesAvailable ist bei mir immer 0 gewesen.
--
Just try it

Antworten