Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   TProcess Output unvollständig (https://www.delphipraxis.net/164161-tprocess-output-unvollstaendig.html)

Der Busch 31. Okt 2011 17:54

TProcess Output unvollständig
 
Hallo allerseits!

Ich möchte mit einem TProcess (Lazarus) die Ausgabe aus einem Konsolenfenster auslesen.
Das funktioniert auch, aber irgendwie kommt nicht immer alles an.
Ich Starte das auslesen mit einem Timer alle 100ms. Ich speichere den Kram aus dem OutputStream in einer TStringList.
Ich habe allerdings destgestellt, dass wenn ich das auslesende programm wild minimiere, maximiere und hineinklicke, kommt oft auch der Rest.
Könnte es vielleicht am Focus des Programms liegen? Während der andere Prozess läuft, ist es Wie eingefroren.

Wäre schön, wenn da jemand etwas weiß.

EDIT:

Ich weiß, dass es daran liegt, dass der Prozess ein neues Fenster öffnet. So werden anscheinen die Infos aus dem Fenster und nicht aus der Konsole gelesen.

JamesTKirk 1. Nov 2011 11:53

AW: TProcess Output unvollständig
 
Ich weiß jetzt nich, ob ich aus deiner Erläuterung schlau werde, aber bezüglich TProcess folgende Erklärung:

Die Pipes, welche für StdOut, StdIn und StdErr verwendet werden haben eine beschränkte Puffergröße. Das heißt, wenn du einen Prozess mit der Option poUsePipes startest, dann musst du aus OutputStream und ErrorStream auslesen, da sonst der gestartete Prozess nicht mehr reinschreiben kann, wenn der Puffer voll ist. Ist der Puffer voll, dann bleibt der Prozess hängen und wartet bis wieder Platz ist (dieser Teil wird vom Betriebssystem übernommen).

In wie weit das auf deine Situation zutrifft kann ich gerade nicht beurteilen.

Gruß,
Sven

Der Busch 1. Nov 2011 13:51

AW: TProcess Output unvollständig
 
Mein Problem ist einfach, dass Ich den Output eines Programmes nicht richtig lesen kann.
Ich habe festgestellt, dass es funktioniert, wenn ich mir von dem Programm nur die hilfe anzeigen lasse, also kein fenster geöffnet
Wird. Sobalst es Aber ein Fenster öffnet, kann ich die zugehörige konsole nicht mehr richtig auslesen. Das auszuführende programm bleibt auch nicht hängen (eher mein eigenes, aber poWaitOnExit ist draußen!).

Bummi 1. Nov 2011 14:27

AW: TProcess Output unvollständig
 
ich verwende kein Lazarus, auf dieser Seite
http://wiki.lazarus.freepascal.org/E...al_Programs/de
wird IMHO eine Lösung für Dein Problem beschrieben....

Der Busch 1. Nov 2011 14:42

AW: TProcess Output unvollständig
 
Diese Seite kenne ich schon. Ich habe aber festgestellt, nachdem die konsole vollgelaufen ist, geht es!
Ich habe die vermutung, dass das programm das prüft und dann einen flush macht. Weiß jemand, wie man ein vollleufen der Pipe
künstlich hervorrufen kann?

creed steiger 1. Nov 2011 18:23

AW: TProcess Output unvollständig
 
Gib mal ein bissl Beispielcode was du da so machst,so wird doch kein Mensch schlau draus.

Der Busch 1. Nov 2011 20:32

AW: TProcess Output unvollständig
 
ich benutze den selben code wie hier:

http://wiki.lazarus.freepascal.org/E...al_Programs/de

Und er funktionirt auch wie er soll, zumnindest für normale Anwendungen. Sobald der Auszulesende prozess aber ein neues fenster öffnet is ende im gelände.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz