TProcess: Nur "sichtbaren" output ausgeben
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
TProcess: Nur "sichtbaren" output ausgeben
Hallo!
Einige Terminal-Anwendungen geben ja z.B. den aktuellen Status eines Vorgangs auf der Konsole aus, löschen diesen dann wieder und ersetzen ihn durch neues. (Beispiel: "gdebi") Wenn ich einen dieser Befehle ausführe habe ich dann am Ende eine einzige Ausgabezeile, der vorherige Inhalt ist ja gelöscht. Wenn ich eine entsprechende Anwendung mit TProcess ausführe und das Ergebnis abfange, bekomme ich jedoch für jeden Zwischenschritt eine Extra-Zeile.
Wie kann ich TProcess anweisen, nur das auszugeben, was ich nach Ausführung des Befehls auch tatsächlich auf der Konsole sehe?
Einige Terminal-Anwendungen geben ja z.B. den aktuellen Status eines Vorgangs auf der Konsole aus, löschen diesen dann wieder und ersetzen ihn durch neues. (Beispiel: "gdebi") Wenn ich einen dieser Befehle ausführe habe ich dann am Ende eine einzige Ausgabezeile, der vorherige Inhalt ist ja gelöscht. Wenn ich eine entsprechende Anwendung mit TProcess ausführe und das Ergebnis abfange, bekomme ich jedoch für jeden Zwischenschritt eine Extra-Zeile.
Wie kann ich TProcess anweisen, nur das auszugeben, was ich nach Ausführung des Befehls auch tatsächlich auf der Konsole sehe?
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: TProcess: Nur "sichtbaren" output ausgeben
Gar nicht, du musst schon selbst schaun was für Steuerzeichen darin vorkommen und ggf die vorherige zeile wieder löschen ö.ä.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: TProcess: Nur "sichtbaren" output ausgeben
Schade. Ich dachte, es würde einfacher und vorgefertigt gehen. So muss ich für jedes Script eine eigene Funktion schreiben. Danke für die Info.
Zuletzt geändert von Targion am Mo 13. Okt 2008, 20:16, insgesamt 1-mal geändert.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: TProcess: Nur "sichtbaren" output ausgeben
Daran ist nichts schwieriges, das sind nur n paar zeilen Code mehr schätzungsweise so ... 5 ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TProcess: Nur "sichtbaren" output ausgeben
Christian hat geschrieben:Gar nicht, du musst schon selbst schaun was für Steuerzeichen darin vorkommen und ggf die vorherige zeile wieder löschen ö.ä.
Als Ansatz, mal den Output speichern und mit einem Hexeditor ansehen. Ist es nur ein CR ohne LF, so kann man ganz einfach den (eigenen) Buffer löschen wenn man das CR empfangen hat. Somit hat man nur die letzte Zeile. Ich nehme an, das ist auch von Christian mit den 'so 5 Zeilen' gemeint
Falls es komplexer ist, so kann man das auch im Hexeditor sehen, mit welchen Steuerzeichen gearbeitet wird. Ein kurzer Blick lohnt sich oft, da es manchmal einfacher ist, als es aussieht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: TProcess: Nur "sichtbaren" output ausgeben
So miente ich es.
http://de.wikipedia.org/wiki/Steuerzeichen
Scheint wirklich nur CR zu sein eventuell noch Substitute.
http://de.wikipedia.org/wiki/Steuerzeichen
Scheint wirklich nur CR zu sein eventuell noch Substitute.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: TProcess: Nur "sichtbaren" output ausgeben
Vielen Dank für die Hilfe! Ich habe das jetzt so gemacht:
Benutzt jemand von euch schon PackageKit? Wenn man das Programm "pkcon" (benutze ich, weil die DBus-Schnittstelle noch nicht alle nötigen Funktionen bereithält) so aufruft: wird zuerst der Status des Paketes gezeigt, dann der Paketname und dann die Paketbeschreibung. Wenn ich den Befehl nun mit TProcess ausführe, fehlt die Beschreibung. Woran kann das liegen? Die Beschreibung landet nicht im Buffer. Kann ein fremdes Programm nachträglich über die Konsole zeichnen?
Code: Alles auswählen
function CmdFinResult(cmd:String):String;
var t:TProcess;
Buffer: string;
BytesAvailable: DWord;
BytesRead:LongInt;
begin
Result:='';
buffer:='';
t:=tprocess.create(nil);
t.Options:=[poUsePipes];
t.CommandLine:=cmd;
try
t.Execute;
while t.Running do begin
BytesAvailable := t.Output.NumBytesAvailable;
BytesRead := 0;
while BytesAvailable>0 do
begin
SetLength(Buffer, BytesAvailable);
BytesRead := t.OutPut.Read(Buffer[1], BytesAvailable);
if (pos(#13,Buffer)>0)or(pos(#26,Buffer)>0)or(Pos(#10,Buffer)>0)then Result:='';
Result := Result + copy(Buffer,1, BytesRead);
BytesAvailable := t.OutPut.NumBytesAvailable;
end;
end;
finally
t.Free;
end;
end;
Benutzt jemand von euch schon PackageKit? Wenn man das Programm "pkcon" (benutze ich, weil die DBus-Schnittstelle noch nicht alle nötigen Funktionen bereithält) so aufruft:
Code: Alles auswählen
pkcon search file /usr/share/applications/vlc.desktop
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TProcess: Nur "sichtbaren" output ausgeben
Targion hat geschrieben:... Die Beschreibung landet nicht im Buffer. Kann ein fremdes Programm nachträglich über die Konsole zeichnen?
Die Frage ist nur, ob das pkcon unter der Umgebung wo es in TProsess läuft überhaupt die Beschreibung ausgibt. Stichwort: aktuelle Shellvariablen des Programmes unter TProzess. Ev. kann man die erweiteret Ausgabe mittels eines Kommandozeilenschalter erzwingen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).