python - Asynkron input-meddelelse fra Windows-konsollen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for at få brugerindgang fra konsollen asynkront, dvs. uden at blokere. Jeg kunne bruge følgende Python-kode til at kontrollere, om der er input, men det giver 100\% CPU-belastning.


import msvcrt
while not msvcrt.kbhit():
    pass


Er der nogen anden måde at gøre dette på? Er det muligt at registrere en tilbagekaldsfunktion til keyboardhændelser i konsollen, for eksempel?


UPDATE: Jeg har oprettet en arbejdsløsning i Python/ctypes. Se eksempel på http://techtonik.rainforce.org/2011/03/asynchronous-input-from-windows-console.html[3]

Bedste reference


Ved hjælp af Win32 API, vil du normalt kalde WaitForMultipleObjects sammen med dine andre begivenheder for at finde ud af, hvad der skete først, standardindgangsstyret selv betragtes udløses, når der er noget input tilgængeligt.



  En proces kan angive et konsolindgangspufferhåndtag i et af ventetilfelterne for at bestemme, hvornår der er indtastet ulæst konsolindgang. Når inputbufferen ikke er tom, signaliseres tilstanden af ​​et konsolindgangsbufferthåndtag. [4]



Så jeg vil foreslå, at du ser og se om python har noget omslag til denne evne.

Andre referencer 1


Der er ikke en måde at asynkront få konsolindgang/-udgang.


Du kan forsøge din kode med at sove for at forhindre CPU-brugspidsen.

Andre referencer 2


msvcrt.getch () [5]