Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich nicht blockierende Benutzereingaben in Python-Konsolenanwendungen implementieren?

Wie kann ich nicht blockierende Benutzereingaben in Python-Konsolenanwendungen implementieren?

Susan Sarandon
Freigeben: 2024-12-01 01:46:09
Original
912 Leute haben es durchsucht

How Can I Implement Non-Blocking User Input in Python Console Applications?

Nicht blockierende Benutzereingaben in Konsolenanwendungen

Beim Erstellen von Konsolenanwendungen, die Benutzereingaben gleichzeitig mit anderen Prozessen erfordern, ist es wichtig, dass dies nicht der Fall ist - Blockieren von Eingaben, um zu verhindern, dass das Programm einfriert, während es auf Eingaben wartet.

Verwenden des msvcrt-Moduls (Windows)

Für Windows-exklusive Konsolenanwendungen bietet das msvcrt-Modul eine einfache Lösung:

import msvcrt

# Define variables
num = 0
done = False

# Infinite loop
while not done:
    # Print and increment number
    print(num)
    num += 1

    # Check for keyboard input
    if msvcrt.kbhit():
        # Display pressed key and quit
        pressed_key = msvcrt.getch()
        print("You pressed", pressed_key, "so now I will quit")
        done = True
Nach dem Login kopieren

Verwendung des Termios-Moduls (Linux)

Für Linux-basierte Konsolenanwendungen kann das Termios-Modul verwendet werden genutzt:

import sys, select, tty, termios

# Define utility function to check for keyboard input
def isData():
    return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])

# Configure terminal settings for non-blocking input
old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())

# Infinite loop
num = 0
while 1:
    # Print and increment number
    print(num)
    num += 1

    # Check for keyboard input
    if isData():
        # Read single character from keyboard
        c = sys.stdin.read(1)
        # Check for escape key to quit
        if c == '\x1b':
            break

# Restore terminal settings
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
Nach dem Login kopieren

Verwendung des Pygame-Moduls (plattformübergreifend)

Wenn Sie nicht blockierende Eingaben über mehrere Plattformen hinweg benötigen oder eine grafische Benutzeroberfläche wünschen, bietet Pygame dies an eine plattformübergreifende Lösung:

import pygame
from pygame.locals import *

# Define variables
num = 0
done = False

# Initialize Pygame
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)

# Infinite loop
while not done:
    # Display number
    display(str(num))
    num += 1

    # Check for events (e.g., keyboard input)
    pygame.event.pump()
    keys = pygame.key.get_pressed()

    # Check for escape key to quit
    if keys[K_ESCAPE]:
        done = True
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Benutzereingaben in Python-Konsolenanwendungen implementieren?. 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