Heim >Backend-Entwicklung >Python-Tutorial >Wie erhalte ich nicht blockierende Konsoleneingaben in Python?
Nicht blockierende Konsoleneingaben erhalten
Beim Erstellen interaktiver Anwendungen ist es oft notwendig, Benutzereingaben zu akzeptieren, ohne laufende Prozesse zu unterbrechen. Dies tritt in Situationen wie der IRC-Client-Entwicklung auf, in denen eine Schleife kontinuierlich Serverantworten empfängt und interpretiert.
Problemstellung
In Python stoppt die Verwendung von raw_input für Konsoleneingaben die Schleife bis der Benutzer eine Eingabe macht. Um eine nicht blockierende Eingabe zu erreichen, benötigen wir einen alternativen Ansatz.
Lösungen
Für Windows-Benutzer, die ausschließlich mit Konsoleneingaben arbeiten, ist das msvcrt-Modul verfügbar:
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-Umgebungen bietet das Termios-Modul eine Lösung:
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跨Plattformen oder wenn Sie GUI in Ihre Anwendung integrieren, ist Pygame eine vielseitige Option:
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
Das obige ist der detaillierte Inhalt vonWie erhalte ich nicht blockierende Konsoleneingaben in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!