Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Konsolenausgabe auslesen von bat Datei (https://www.delphipraxis.net/155517-konsolenausgabe-auslesen-von-bat-datei.html)

NickelM 26. Okt 2010 21:01

Konsolenausgabe auslesen von bat Datei
 
Hallo zusammen,

Ich hab mal ne frage ob es die möglichkeit gibt den Konsolenoutput von einer Bat Datei auszulesen bzw. zu kopieren?

Folgender Hintergrund:

Die Bat datei führt eine Jar Datei mit Parametern aus.
Die Jar Anwendung stellt einen Server da. (Jar Datei habe ich net geschrieben auch net die Bat)
Wenn der Server nun einen Fehler rausschmeist und "down" geht, bleibt die Console offen und Server bleibt down.
Jetzt wollte ich eine Konsolenanwendung schreiben, die dne Fehler ode abfängt und ihn sich merkt und dne Server neustartet.
Sozusagen er startet die Bat datei (das hab ich schon hinbekommmen xD lol) soll dan warten auf einen Fehler, server neustarten und dan wieder auf Fehler warten usw.

Geht überhaupt sowas? also mit WaitforIdleInput (oder sowas) klappt es schonmal nicht. Und WaitForSingelObject geht nur wenn die Console geschlossen wird xD

Assarbad 26. Okt 2010 21:06

AW: Konsolenausgabe auslesen von bat Datei
 
Zitat:

Zitat von NickelM (Beitrag 1057971)
Ich hab mal ne frage ob es die möglichkeit gibt den Konsolenoutput von einer Bat Datei auszulesen bzw. zu kopieren?

Das kommt drauf an. Wenn du mit CreateProcess (et al.) die BAT-Datei ausführst (also implizit via cmd.exe), kannst du bei der Prozesserstellung Pipes anstelle der Standardein-/ausgabekanäle angeben. Und von denen kann man natürlich lesen was ansonsten auf der Konsole landen würde.

Aus meiner Delphi-Zeit von vor 2006 erinnere ich mich aber an Komponenten die versprachen das ranpappen der Pipes und die Prozesserstellung stark zu erleichtern. Vielleicht kann dir da jemand anderes einen Tip geben.

NickelM 26. Okt 2010 21:17

AW: Konsolenausgabe auslesen von bat Datei
 
Also mit name Pipes hab ich schonmal was gelesen. Aber noch nie damit gearbeitet geschweie den verstanden.

rollstuhlfahrer 26. Okt 2010 21:22

AW: Konsolenausgabe auslesen von bat Datei
 
also für den Anfang hab ich mal einen Tipp, der bestimmt hilft: hier

Bernhard

NickelM 27. Okt 2010 05:04

AW: Konsolenausgabe auslesen von bat Datei
 
Naja, der Code ist Cool..nur aus unerklärlichzen gründen funkt sie net mit der Bat datei. Es starten kein output...habs normal versucht zustarten geht...im hintergrund die java anwendung starten aber es kommt garkeine Konsolenoutput von der bat datei. Es wird auch nichts aufgezeichnet...nichts...

EDIT: Okay scheint an der bat datei zuliegen...der direkter output der bat wird angezeigt. Das Problem ist, beim normalen ausführen wird in der Console das angezeit was sozusagen die Java Datei ausspukt...aber die sache direkt über java zulaufen funkt auch nicht...das gleiche mit der client bat (vllt das es an dem server liegt) nein auch nicht...der output der jar datei wird nicht ausgeben...
Falls es jemand kennt, es geht um einen Minecraft Server.

Andreas L. 27. Okt 2010 09:57

AW: Konsolenausgabe auslesen von bat Datei
 
Das könnte sein was du suchst: http://maxxdelphisite.free.fr/doscmd.htm

Im Delphi-Forum geistert irgendwo auch eine D2009-Variante davon rum falls du die brauchst ;-)

EDIT: Hier die 2009er-Version: http://www.delphiforum.de/viewtopic.php?p=556365#556365

Assarbad 27. Okt 2010 09:59

AW: Konsolenausgabe auslesen von bat Datei
 
Zitat:

Zitat von NickelM (Beitrag 1058026)
EDIT: Okay scheint an der bat datei zuliegen...der direkter output der bat wird angezeigt. Das Problem ist, beim normalen ausführen wird in der Console das angezeit was sozusagen die Java Datei ausspukt...aber die sache direkt über java zulaufen funkt auch nicht...das gleiche mit der client bat (vllt das es an dem server liegt) nein auch nicht...der output der jar datei wird nicht ausgeben...

Ich hatte ernste Probleme das zu parsen. Muß wohl mal meinen Deutsch-Sprachprozessor überprüfen lassen.

Die Frage wäre dann jetzt wie das Java-Programm gestartet wird. Per start/cmd.exe? Also in einer anderen Konsole? Oder in der gleichen Konsole? Denn eins ist klar, mit der o.g. Methode kannst du nur innerhalb der von dir gestarteten Konsole Ausgaben abfangen und Eingaben tätigen.

NickelM 27. Okt 2010 10:20

AW: Konsolenausgabe auslesen von bat Datei
 
hab ich auch schon gemerkt...wenn ich den Client starte, da wo ein paar echo ausgaben sind, die werden aufgefangen.

Also.. Die Bat datei führt eine Jar Datei mit Commandline aus. Da es Bat ist, wird diese ja in der cmd.exe ausgeführt.
Beim Server bekomm ich halt infos ob alles hochgefahren ist usw.

Wenn ich nun mit der Prozedur die Bat datei öffne bekomm ich garkeine Ausgaben, auch nicht nach schliessen der Konsolenanwendung :lol:
In der bat steht echo off. Es werden trotzdem Dinge beim normalen Ausführen in die Konsole geschrieben. Diese muss ich abfangen. Diese kommen vermutlich von der Java.exe. So direkt den Server mit der java.exe mit den gleichen Commands wie die bat datei auszufüren, funkt auch nicht.....

Weis langsam nicht mehr weiter. Ich glaub ich lass es einfach, weil irgendwie komme ich einfach nicht an die Ausgaben.

Assarbad 27. Okt 2010 10:22

AW: Konsolenausgabe auslesen von bat Datei
 
Hmm, irgendwie hast du meine Fragen sehr elegant umschifft.

NickelM 27. Okt 2010 11:24

AW: Konsolenausgabe auslesen von bat Datei
 
hmm..wenn du meinst..erlich gesagt hab ich von createprozess usw nicht viel ahnung. Arbeite sogut wie nie damit.

Satty67 27. Okt 2010 11:52

AW: Konsolenausgabe auslesen von bat Datei
 
wenn es nur ein einzelner Aufruf ist, könnte auch eine Umleitung in eine Textdatei reichen:

xyz.exe %parameter > Ausgabe.txt

rollstuhlfahrer 27. Okt 2010 15:05

AW: Konsolenausgabe auslesen von bat Datei
 
du könntest allen beteiligten sehr hilfreich sein, indem du einfach mal den Inhalt deiner ominösen .bat-Datei preisgibst. Dann wissen wir auch alle, was mit Java(TM) gemeint ist und woher die ECHOs kommen.

Bernhard

NickelM 29. Okt 2010 16:45

AW: Konsolenausgabe auslesen von bat Datei
 
hmm okay... die bat datei ist halt von einem spiel:

Code:
@echo off
java -Xms512M -Xmx512M -cp minecraft-server.jar com.mojang.minecraft.server.MinecraftServer
pause
Obwohl ich wenig glaube das das hilft...
Die Bat datei liegt zusammen mit der jar datei in dme gleichem verzeichnis

rollstuhlfahrer 29. Okt 2010 17:32

AW: Konsolenausgabe auslesen von bat Datei
 
dann nimm doch mal den Java-Befehl als Maß der Dinge oder lass das pause weg. Sonst beendet sich der Prozess nicht rechtzeitig (der Code aus SwissDelphiCenter wartet nämlich artig darauf, dass sich der Prozess beendet).

Bernhard

Assarbad 29. Okt 2010 17:45

AW: Konsolenausgabe auslesen von bat Datei
 
Zitat:

Zitat von NickelM (Beitrag 1058515)
Obwohl ich wenig glaube das das hilft...
Die Bat datei liegt zusammen mit der jar datei in dme gleichem verzeichnis

Un ob das hilft. Wie Bernhard schon sagte, solltest du ganz einfach nur java.exe mit den o.g. Argumenten aufrufen. Zugegeben, eventuell mußt du noch in der Registry ermitteln wo dein JRE installiert ist und die java.exe zu finden ist (sollte sie nicht im gleichen Verzeichnis liegen), aber das ist trivial.

rollstuhlfahrer 29. Okt 2010 19:38

AW: Konsolenausgabe auslesen von bat Datei
 
java.exe sollte normalerweise im Suchpfad liegen (%PATH%), weil ja die CMD Java auch finden kann (und da bin ich mir sicher, dass hier keine Reg-Schlüssel ausgewertet werden).

Bernhard

NickelM 31. Okt 2010 01:03

AW: Konsolenausgabe auslesen von bat Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
nene funkt net....
also das hab ich schon alles versucht

der pfad ist C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server\start server.bat
Code:
RunCaptured('C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server','java','-Xms512M -Xmx512M -cp minecraft-server.jar com.mojang.minecraft.server.MinecraftServer');
Konsole beendet..keine ausgabe (dauert nur ein paar sekunden)

Code:
RunCaptured('C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server','','start server.bat');
funkt nicht...keine ausgabe

Code:
RunCaptured('C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server','cmd','start server.bat');
geht auch nicht gleiche wie eins unten...

Code:
RunCaptured('C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server','cmd','java -Xms512M -Xmx512M -cp minecraft-server.jar com.mojang.minecraft.server.MinecraftServer');
geht überhaupt nicht....falsche ausgabe nur vezeichnis..das wars

pause rausnehmen kein unterschied...im anhang die normale ausgabe :
das fenster bleibt offen, da es ja eine server anwendung ist.

also ich bin mit meinem latein am ende. auch bei der SetPriorityClass Prozedur stat IDLE_PRIORITY_CLASS,CREATE_NEW_CONSOLE macht keine unterschied bei keinem.

Ich vermute das es aus irgendeinem grund an der jar liegt, das die nur per bat ausführbar ist.

Assarbad 31. Okt 2010 01:40

AW: Konsolenausgabe auslesen von bat Datei
 
Es wäre schön, wenn du einfach mal das machen würdest, was wir schreiben ;)

Und hier hat niemand "cmd" oder "java" geschrieben. Auch beim SwissDelphiCenter ist das Beispiel mit cmd.exe und ich habe auch ganz klar java.exe geschrieben. Wenn das bei ShellExecute und ShellExecuteEx geht, ist das ja ne feine Sache, aber man mag es kaum glauben, CreateProcess gehorcht anderen Regeln.

Ach ja und: "geht nicht" ist keine gute Ansage, wenn man möchte, daß einem geholfen wird. Gerade als Entwickler solltest du vielleicht das beherzigen, was wir Entwickler gern den Benutzern ans Herz legen - vernünftige Fehlermeldungen. Also einfach mal versuchen den kopierten Code zu verstehen und dann vielleicht auch mal die Win32-Fehlercodes hier reinschreiben, wenn's "nicht geht" ;)

Nachtrag: übrigens hatte ich dich auch gebeten java.exe auszuführen und nicht "java" als Befehl innerhalb cmd (bzw. cmd.exe), was nämlich ohnehin /c oder /k erfordern würde.

Delphi-Quellcode:
RunCaptured('C:\Dokumente und Einstellungen\Mario\Eigene Dateien\minecraft-server','java.exe','-Xms512M -Xmx512M -cp minecraft-server.jar com.mojang.minecraft.server.MinecraftServer');

NickelM 31. Okt 2010 11:30

AW: Konsolenausgabe auslesen von bat Datei
 
also ich bin jetzt net so blöd, aber ich weis das windows cmd und java (beide in java.exe oder cmd.exe umwandelt)
Zumindest bei cmd..
Und auserdem hat dies kein unterschied gemacht.......
Ich glaube ich lass des lieber mit selbst programmieren, weil es scheint das keiner hier eine antwort darauf hat und es mir solangsam zudumm ist.

Damit schlisse ich das einfach und lass es sein. Ich such mir eine Komponente die das macht. Dachte das geht einfacher. Aber anscheint liegt es an der verschriekung von der jar datei. Ich denk das wird nicht umsonst mit dem Commandos mit einer Bat datei ausgeführt. Oder was meint ihr? Von daher geb ichs auf. Es bringt nichts darumzumachen, da es bei mir anscheinend ein spezieller Fall ist.

Andreas L. 31. Okt 2010 12:16

AW: Konsolenausgabe auslesen von bat Datei
 
Zitat:

Zitat von NickelM (Beitrag 1058717)
also ich bin jetzt net so blöd, aber ich weis das windows cmd und java (beide in java.exe oder cmd.exe umwandelt)
Zumindest bei cmd..
Und auserdem hat dies kein unterschied gemacht.......
Ich glaube ich lass des lieber mit selbst programmieren, weil es scheint das keiner hier eine antwort darauf hat und es mir solangsam zudumm ist.

Damit schlisse ich das einfach und lass es sein. Ich such mir eine Komponente die das macht. Dachte das geht einfacher. Aber anscheint liegt es an der verschriekung von der jar datei. Ich denk das wird nicht umsonst mit dem Commandos mit einer Bat datei ausgeführt. Oder was meint ihr? Von daher geb ichs auf. Es bringt nichts darumzumachen, da es bei mir anscheinend ein spezieller Fall ist.

Die von mir verlinkte Komponente kann alles was du brauchst (http://www.delphipraxis.net/1058070-post6.html). Wenn du meinen Post aber einfach ignorierst, ist dir nicht zu helfen... :roll:

NickelM 31. Okt 2010 13:50

AW: Konsolenausgabe auslesen von bat Datei
 
Okay...sorry andreas du hast recht...
Die Komponente funkt soweit das sie was ausspuckt womit ich die Komponente für meine Zwecke weitermachen kann.
Hab nur gedacht, naja Delphi 5 ne oder? son alter mist? Wenn ich nun aber mit AnsiStrings arbeite und auch die Ansi-Funktionen nehme startet er es und bekomm soagr ne ausgabe xD *freu*

EDIT: Habe es geschafft mit der Komponente. Es lag wenn ich das jetzt mal so anguge an den Strings. Vermutlich nihmt er keine Unicode an nur Ansi...
Mit der Funktion funkt es nicht. Die Komponente funkt. Ka warum..aber es geht xD...So damit entlich beendet und beantwortet nach langem

Andreas L. 31. Okt 2010 15:47

AW: Konsolenausgabe auslesen von bat Datei
 
Zitat:

Zitat von NickelM (Beitrag 1058741)
Okay...sorry andreas du hast recht...
Die Komponente funkt soweit das sie was ausspuckt womit ich die Komponente für meine Zwecke weitermachen kann.
Hab nur gedacht, naja Delphi 5 ne oder? son alter mist? Wenn ich nun aber mit AnsiStrings arbeite und auch die Ansi-Funktionen nehme startet er es und bekomm soagr ne ausgabe xD *freu*

EDIT: Habe es geschafft mit der Komponente. Es lag wenn ich das jetzt mal so anguge an den Strings. Vermutlich nihmt er keine Unicode an nur Ansi...
Mit der Funktion funkt es nicht. Die Komponente funkt. Ka warum..aber es geht xD...So damit entlich beendet und beantwortet nach langem

Deshalb habe ich ja auch noch eine Delphi2009-Version verlinkt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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