Heim > Backend-Entwicklung > Python-Tutorial > Wie erhalte ich nicht blockierende Konsoleneingaben in Python?

Wie erhalte ich nicht blockierende Konsoleneingaben in Python?

Susan Sarandon
Freigeben: 2024-12-02 14:10:13
Original
956 Leute haben es durchsucht

How to Get Non-Blocking Console Input 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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage