Hallo,
ich habe hier folgendes Problem:
Mein Windows-C-Programm (Consolen-exe) läuft in der main-loop und wartet auf _kbhit().
Die exe looped also aktiv mit einem kleinen sleep().
Wie kann man diese exe mit Popen starten und den Key senden, damit die exe stoppt?
Beim Testen mit _getch() und gets() im C-Programm habe ich festgestellt, dass ich mit p.communicate() zwar den Input von gets()
bekomme, nicht aber _getch().
Damit klappt es wohl bei _kbhit() auch nicht.
Geht das überhaupt?
Danke,
lightos
subprocess Popen communicate
@lightos: Du müsstest wahrscheinlich einen Tastenanschlag für das Terminal simulieren in dem die EXE läuft. Da gibt es Bibliotheken für Python (`SendKeys` oder `PyWinAuto` beispielsweise). Besonders schön ist so eine API ja nicht wirklich.
- lightos
- User
- Beiträge: 39
- Registriert: Montag 12. Dezember 2011, 19:39
- Wohnort: Raum Bruchsal
- Kontaktdaten:
Das habe ich schon gesehen. Benötigt aber unter Python spezielle Erweiterungen, also nicht im Basis-Umfang enthalten.
Das C-Programm kann ich anpassen, aber wie?
Alternativ dann wohl doch lieber über eine C-Dll und ctypes....
Das C-Programm kann ich anpassen, aber wie?
Alternativ dann wohl doch lieber über eine C-Dll und ctypes....
@lightos: Das kommt drauf an was das C-Programm macht/machen soll. Man könnte statt eines Tastendrucks eine Eingabezeile lesen und zwar nicht-blockierend. Oder man macht es über ein Signal wie SIGINT oder gar SIGTERM.
@lightos: Man könnte das über einen Thread lösen der das lesen (blockierend) übernimmt und die Daten in eine `Queue.Queue` steckt, die man dann im Hauptthread nicht-blockierend abfragen kann.
@lightos: Jetzt hätte ich fast gesagt das wird doch vom `threading`-Modul erschlagen, aber Du hast da auf der Seite der Pipe ja ein C-Programm.