TProcess Output lesen

Antworten
Tisse
Beiträge: 2
Registriert: Mo 25. Aug 2008, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hüllhorst
Kontaktdaten:

TProcess Output lesen

Beitrag von Tisse »

Hallo,

ich möchte in meinem Programm eine fremde Konsolenanwendung starten und deren zurückgegebene Werte auslesen. Ich benutze die Ubuntu Version 8.04 und Lazarus 0.9.24 Beta.

Meine Lösung sieht vor dies mit Hilfe von TProcess zu ermöglichen. In der Lazarus Wiki (http://wiki.lazarus.freepascal.org/Exec ... rograms/de" onclick="window.open(this.href);return false;) ist ja ein entsprechendes Beispiel dazu.

Mich wundert nur das ich beim ausführen einer Kommandozeile über die Konsole andere Rückgabewerte bekomme als über TProcess.

Mein Quelltext:

Code: Alles auswählen

 
procedure TForm1.StartProgram();
var
   AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.CommandLine := extract /media/Daten/test.mp3;
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
  AProcess.Execute;
 
  Memo1.Clear;
  Memo1.Lines.LoadFromStream(AProcess.Output);
  AProcess.Free;
end;
 
Beim ausführen der gleichen Kommandozeile über die Konsole erhalte ich die erhofften Informationen, AProcess.Output gibt jedoch nichts zurück.

Hat jemand eine Idee woran das liegt?

MfG,
Christian

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: TProcess Output lesen

Beitrag von creed steiger »

Wenn der Output zu groß ist kommt es zu einem Deadlock.
Schau dir die Prozessdemo von hier an:
https://lazarus-ccr.svn.sourceforge.net ... s/process/" onclick="window.open(this.href);return false;

Ansonsten steht eigentlich alles dazu auf der Wikiseite.

AProcess.CommandLine := extract /media/Daten/test.mp3 solte doch wohl
AProcess.CommandLine := "extract /media/Daten/test.mp3" heissen,oder?

Tisse
Beiträge: 2
Registriert: Mo 25. Aug 2008, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hüllhorst
Kontaktdaten:

Re: TProcess Output lesen

Beitrag von Tisse »

Vielen dank für den Hinweis, manchmal sieht man den Wald vor lauter Bäumen nicht...

Mir ist aufgefallen das das gnome-terminal die Leerzeichen in Dateinamen durch "\ " ersetzt, das hatte ich bei der Angabe des Pfades verschiedener Dateien auch gemacht. Lässt man den Dateinamen wie er ist und setzt ihn ebenfalls in Anführungszeichen dann funktioniert es.

Beispiel:

Code: Alles auswählen

AProcess.CommandLine := 'extract /media/Daten/ein\ test.mp3'
funktioniert nicht richtig

Code: Alles auswählen

AProcess.CommandLine := 'extract "/media/Daten/ein test.mp3"'
funktioniert richtig


MfG,
Christian

Antworten