Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 22. Jun 2011, 21:34
Hallo,

kann es sein, dass FTP einige Ausgaben auf der ErrorConsole als ErrorMessage ausgibt und diese vonTDosCommand nicht erfasst wird.

Grüße
Klaus
TDosCommand erfasst die Erroroutputs und behandelt sie so als würden sie ganz normal auf der Console erscheinen.



Vielleicht sollte man die Frage anders stellen. Ist es überhaupt möglich mit TDosCommand interaktive Befehle (Programme) auszuführen und deren Ausgabe auszuwerten?
Die Frage ist nicht, was kann TDosCommand für dich tun, sondern was kannst du für TDosCommand tun ?
Na zumindest so ähnlich, siehe hier:
Zitat:
Hinweis: Untergeordnete Prozesse, die C-Laufzeitfunktionen wie "printf()" und "fprintf()" verwenden, funktionieren möglicherweise nicht richtig, wenn sie umgeleitet werden [wie in TDosCommand]. Die C-Laufzeitfunktionen haben separate E/A-Puffer. Bei der Umleitung werden diese Puffer möglicherweise nicht unmittelbar nach jedem E/A-Aufruf geleert. Folglich wird die Ausgabe zur Umleitungspipe eines printf()-Aufrufs oder die Eingabe eines getch()-Aufrufs nicht unmittelbar geleert und verzögert sich somit, manchmal ins Unendliche. Dieses Problem kann vermieden werden, wenn der untergeordnete Prozess die E/A-Puffer nach jedem Aufruf einer C-Laufzeit-E/A-Funktion leert. Nur der untergeordnete Prozess kann seine C-Laufzeit-E/A-Puffer löschen. Ein Prozess kann seine C-Laufzeit-E/A-Puffer durch Aufruf der Funktion "fflush()" löschen.
Also versuche mal den Puffer zu flashen in deinem kleinen Consolenprogramm (ändert natürlich nix am Verhalten von ftp).
Ich habe schon damals einiges versucht um diese Sachen zu bekommen. Die Pipes sagen einfach nix und tun so als würde auch nix passieren. Auch andere Sachen (MSDN-Library durchsuchenSetConsoleMode) in diese Richtung funktionieren nicht. Wenn jemand eine Lösung parat hat oder weiß, dass es bei anderen Programmen geht (und mir Quellcode, egal in welcher Sprache liefert), baue ich das sofort ein.

Ich habe sowieso letztens noch ein paar Erweiterungen in TDosCommand geschrieben, die ich brauchte (Umgebungsvariablen und CurrentDirectory setzen; ein kleines MemLeak ausmertzen und dann dachte ich noch so an dies und das, achja und Unicode - wobei ich letzteres nicht selber brauche und auch nicht testen kann und nur hoffe, dass es wie widestring/char reagiert).

Achso, und wenn du willst, dass dein Consolenprogramm den output gleich an den Elternprozess ()Also TDosCommand) weitergibt musst du die Funktion "flush(output)" nach jeder Textausgabe aufrufen. Delphi speichert die Ausgabe intern in einem Buffer. WriteFile ruft Delphi ersta uf, wenn die Funktion flush aufgerufen wird, oder wenn mehr als (bei mir:siehe system.TTextRec.Buffer) 128 Bytes ausgegeben wurden. Ist also etwas Delphieigenes (wie von microsoft oben beschrieben).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.

Geändert von sirius (23. Jun 2011 um 13:31 Uhr)
  Mit Zitat antworten Zitat