Hallo, ich habe in Windows eine *.exe-Datei, die beim Aufrufen ein "eigenes" Kommandozeilenprogramm startet. Ich bekomme es nicht hin, dass dieses Programm "innerhalb" von cmd.exe ausgeführt wird, damit ich z.B. mit Python Befehle ausführen und die Programmausgabe auswerten kann. Es handelt sich dabei um einen dedizierten Server für das Spiel Wreckfest. Beim Aufruf aus cmd startet immer ein separates Kommondozeilenprogramm (siehe Anhang). Auch beim Ausführen in Python mit z.B. subprocess.Popen(...) wird das Programm "extern" als eigenes Programm ausgeführt und ich erhalte im Python Programm nicht die Ausgabe vom Server. Übrigens: Das Spiel selbst (nicht als dedizierter Server) wird mit derselben *.exe Datei ausgeführt, in diesem Fall aber ohne den Parameter "-s" um den dedizierten Server zu starten. In diesem Fall erhalte ich mit subprocess.Popen(...) Kommandozeilenausgaben in stdout, obwohl das Spiel "als eigenes Programm / Fenster" geöffnet wird. Hat jemand von euch vielleicht noch einen Trick auf Lager, z.B. wie ich das Programm forciert innerhalb von cmd öffnen kann oder ähnliches? Danke und viele Grüße
server.exe | python meinpythonprogramm.py Die Pipe | sollte dann den stdout zu deinem Pythonscript stdin umleiten.
Dirac I. schrieb: > Beim Aufruf aus cmd startet immer ein separates Kommondozeilenprogramm Wenn das Programm eine neue Konsole aufmacht, dann tut es das. Dazu gibt es die Win32-API-Funktion "AllocConsole". Man müsste via DLL-injection o.ä. dem Programm eine alternative Version von "AllocConsole" unterjubeln, die keine neue aufmacht, sondern einfach nur ein Handle auf die bestehende zurückgibt. Sofern mit CreateProcess ein neuer Prozess gestartet wird, kann mit dem Flag CREATE_NEW_CONSOLE ebenfalls das Erzeugen einer neuen Konsole erzwungen werden. Hier könnte man überlegen, ob man das betreffende Programm patcht, um das Flag zu entfernen ... Lesematerial: https://learn.microsoft.com/en-us/windows/console/creation-of-a-console
Hallo zusammen, vielen Dank für eure Hilfe! :-) @Sebastian: Ich habe deine Lösung ausprobiert, sie scheint aber ebenfalls nur bei Programmen zu funktionieren, die kein eigenes Kommandozeilenprogramm öffnen. Ich habe es mit folgenden beiden Aufrufen ausprobiert: Wreckfest_x64.exe -s server_config=server_config.cfg | python WreckfestServerTest.py start /B Wreckfest_x64.exe -s server_config=server_config.cfg | python WreckfestServerTest.py In beiden Fällen öffnet sich der Server von Wreckfest extern als Kommandozeilenprogramm und mein Python Script bekommt im stdin keine Daten. Mit einem "klassischen" Programm, das über stdin und stdout kommuniziert funktioniert deine Lösung (getestet mit der Schachengine stockfish). @Harald Ich vermute mitlerweile auch, dass man um solche Hackereien nicht herum kommt. Da ich davon wenig Ahnung habe, erscheint mir der Aufwand allerdings zu hoch und der Nutzen dieses Projektes zu gering, als dass ich mich da ranwagen werde. :-) Viele Grüße und nochmals vielen Dank für eure Hilfe! :-)
Dirac I. schrieb: > Ich bekomme es nicht hin, dass dieses Programm "innerhalb" von cmd.exe > ausgeführt wird, damit ich z.B. mit Python Befehle ausführen und die > Programmausgabe auswerten kann. Das geht auch nicht, weil Dein Programm kein Kommandozeilenprogramm ist, sondern ein ganz normales GUI-Programm. Sieht man ja schon am Icon oben links. Damit kann es nicht direkt in der Kommandozeile laufen, und es benutzt damit sicherlich auch keinerlei STDIO-Funktionalität, womit man den Output via Umleitung oder Pipen abgreifen kann (obwohl es sicherlich auch als GUI-Programm STDIO benutzen kann, wenn die Entwickler das denn nur wöllten ...)
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.