AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDosCommand - Problem mit diversen Befehlen

Ein Thema von Culxxaw · begonnen am 20. Jun 2011 · letzter Beitrag vom 24. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Culxxaw

Registriert seit: 21. Okt 2008
40 Beiträge
 
#1

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 20. Jun 2011, 20:48
der "ftp"-Befehl ist doch - alleinstehend und ohne Parameter ausgeführt - ein interaktives Kommando.
Wenn du beim Aufruf keinerlei Parameter mitschickst, geht der Befehl in den interaktiven Modus und wartet auf Eingaben (teste es mal in der manuellen Konsole...). Das wird dein Problem sein
Genau das ist ja gewollt. Der Ftp-Befehl ist jetzt nur ein Beispiel. Gibt ja mehrere (nicht systemeigene) Befehle, die interaktiv sind und manche davon lassen sich leider nicht mit den entsprechenden Parametern aufrufen.
Desweiteren reagiert die Konsole ja auch auf meine Eingaben. Vll noch mal als Beispiel:

Ich sende den Befehl "ftp". (an die CMD)
In der Console würde jetzt soetwas stehen wie "ftp>", um weitere Befehle entgegenzunehmen. Das klappt quasi auch mit TDosCommand.
Nun sende ich ein "?".
In der Console stände jetzt die gesamte Befehlsliste. TDosCommand schickt aber nur die erste Zeile zurück.
Sende ich ein "quit", was die ftp.exe beendet, so schickt TDosCommand mir die fehlenden Zeilen vom "?"-Befehl.

Beim Beenden deines Programms wird der FTP-Befehl aber, kurz bevor sich dein eigenes Programm schliesst, auch abgeschossen und du siehst noch den Output des "sterbenden" Prozesses, bzw. was er bis zum "Abschuss" ausgegeben hat.
Das ist glaub ich ein Missverständnis. Ich schließe mein Programm gar nicht. Lediglich die ftp.exe mit dem "Quit"-Befehl. Nachdem ich die FTP.exe beendet habe kann ich auch ganz normal Befehle and die CMD.exe schicken (cd, dir usw).

kann es sein, dass FTP einige Ausgaben auf der ErrorConsole als ErrorMessage ausgibt und diese vonTDosCommand nicht erfasst wird.
Öhm, das ist ne gute Frage. Eigentlich hätte die FTP ja keinen Grund dazu aber man weiß ja nie . Kann man das denn irgendwie herausfinden?
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 20. Jun 2011, 21:15
Entschuldige, wenn ich eine unproduktive Zwischenfrage stelle:

Ich habe nur eine Version von 2003 (2.1) und finde via Google nur noch älteres. Woher gibt es eine Version von TDosCommand von 2009?
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#3

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 21. Jun 2011, 08:03
Ich habe nur eine Version von 2003 (2.1) und finde via Google nur noch älteres. Woher gibt es eine Version von TDosCommand von 2009?
hier
Glückauf
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 21. Jun 2011, 08:48
Danke für den Link, aber das ist die version 2.0 von 2002 (auch wenn der Archiv-Name etwas anderes behauptet). Zumindest wenn man der Historie in der Unit glauben darf. Evtl auch angepasst ohne die Historie zu aktualisieren?

Geändert von Satty67 (21. Jun 2011 um 08:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#5

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 21. Jun 2011, 08:58
Also, ich finde da ne Menge Sachen, die Sirius dabei gemacht hat ( 2009 )
Glückauf
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 21. Jun 2011, 09:07
Ok, es ist die Version ohne 2009 im Archivnamen, die dann angepasst und neuer ist (Hatte zuerst die von Jaenicke runtergeladen, die identisch zur Version auf der HP ist). Da steht dann allerdings einiges an Änderungen drin.

Gut, sorry nochmal für's halbe OT... aber wer das Problem des TS nachvollziehen will, sollte ja auch die gleiche Version benutzen.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.780 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 20. Jun 2011, 21:17
.. habe es mal gerade zu Fuß getestet:

ftp 2> test.out
?

Ausgabe kommt auf den Standardoutput.
ftp 1> test.out
?

Ausgabe ist in der Datei.

Eine Vermutung habe ich ich noch, tritt das Problem vielleicht immer dann auf
wenn die Rückgabe mehrzeilig ist?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Culxxaw

Registriert seit: 21. Okt 2008
40 Beiträge
 
#8

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 20. Jun 2011, 21:36
Das kann sein. Also ich habe gerade mal ein bisschen rumprobiert. Sendet man z.B. den "open"-Befehl an die FTP.exe dann erscheint ganz richtig das "Zu" in dem Ausgabememo. Oder bei anderen Befehlen ein "Nicht verbunden.".

Ich habe mir mal eben ein Test-Konsolenprogramm geschrieben, welches einen mehrzeiligen Output generiert.
Delphi-Quellcode:
var AInput : string;

begin
 writeln('Auf Eingabe warten');
 readln(AInput);
 writeln('Hier');
 writeln('kommt');
 writeln('die Eingabe:' + AInput);
end.
Dabei wird nach Aufruf keine der Zeilen direkt angezeigt. Ich kann zwar an entsprechender Stelle eine Eingabe übergeben, doch die Ausgabe erfolgt erst nach Beenden des Befehls.
Verwendet man statt mehreren WrieLn() einen Zeilenumbruch erhält man das gleiche Ergebnis.

Vielleicht sollte man die Frage anders stellen. Ist es überhaupt möglich mit TDosCommand interaktive Befehle (Programme) auszuführen und deren Ausgabe auszuwerten?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 22. Jun 2011, 20: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 12:31 Uhr)
  Mit Zitat antworten Zitat
Culxxaw

Registriert seit: 21. Okt 2008
40 Beiträge
 
#10

AW: TDosCommand - Problem mit diversen Befehlen

  Alt 24. Jun 2011, 13:54
Hallo sirius,

erstmal vielen Dank für deine ausführliche Antwort. Das hilft mir schonmal ein Stückchen weiter.

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.
Also perfekt klappten tut es bei dem "Console"-Projekt (wahrscheinlich kennst du das ja auch). Das nutzt allerdings soweit ich weiß Hooks und ist in C++ geschrieben. Habe mir den Quelltext mal angeschaut, blicke jedoch überhaupt nicht durch bzw. finde die Stelle(n) nicht wo es ans Eingemachte geht. Bei der neuesten Version ist auch eine Dll namens "ConsoleHook" im Ordner enthalten. Wenn es dafür jetzt noch eine Doku gäbe wäre das natürlich super

[ADD]
Im Projektordner der Version 2 Beta ist ein Ordner namens ConsoleHook, in dem sich vermutlich alles notwendige befindet. Nun ist nur noch die Frage, ob und wie sich das nach Delphi übersetzen lässt.

Geändert von Culxxaw (24. Jun 2011 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz