Nicht blockierende Konsoleneingabe: Asynchrone Handhabung freischalten
Stellen Sie sich das folgende Szenario vor: Sie erstellen einen IRC-Client in Python und haben ihn eingerichtet eine Schleife zum Empfangen und Analysieren von Daten vom Server. Wenn Sie jedoch raw_input zum Eingeben von Text verwenden, wird die Schleife abrupt angehalten, bis Ihre Eingabe abgeschlossen ist. Diese Unterbrechung behindert das reibungslose Funktionieren der Schleife.
Um diese Herausforderung zu bewältigen und die kontinuierliche Ausführung der Schleife aufrechtzuerhalten, stehen verschiedene nicht blockierende Eingabemethoden zur Verfügung:
Für Windows (nur Konsole). ):
import msvcrt num = 0 done = False while not done: print(num) num += 1 if msvcrt.kbhit(): print("you pressed", msvcrt.getch(), "so now I will quit") done = True
Für Linux:
import sys import select import tty import termios def isData(): return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []) old_settings = termios.tcgetattr(sys.stdin) try: tty.setcbreak(sys.stdin.fileno()) i = 0 while 1: print(i) i += 1 if isData(): c = sys.stdin.read(1) if c == '\x1b': # x1b is ESC break finally: termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
Für Cross-Platform oder GUI Integration:
import pygame from pygame.locals import * def display(str): text = font.render(str, True, (255, 255, 255), (159, 182, 205)) textRect = text.get_rect() textRect.centerx = screen.get_rect().centerx textRect.centery = screen.get_rect().centery screen.blit(text, textRect) pygame.display.update() pygame.init() screen = pygame.display.set_mode( (640,480) ) pygame.display.set_caption('Python numbers') screen.fill((159, 182, 205)) font = pygame.font.Font(None, 17) num = 0 done = False while not done: display( str(num) ) num += 1 pygame.event.pump() keys = pygame.key.get_pressed() if keys[K_ESCAPE]: done = True
Durch die Übernahme dieser nicht blockierenden Eingabetechniken können Sie Benutzerinteraktionen in Echtzeit nahtlos integrieren, ohne die zu unterbrechen Fluss Ihrer IRC-Schleife.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Konsoleneingaben in Python für Echtzeitanwendungen implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!