Maison >développement back-end >Tutoriel Python >Comment puis-je implémenter une entrée utilisateur non bloquante dans les applications console Python ?

Comment puis-je implémenter une entrée utilisateur non bloquante dans les applications console Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 01:46:09846parcourir

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

Saisie utilisateur non bloquante dans les applications de console

Lors de la création d'applications de console qui nécessitent une saisie utilisateur simultanément avec d'autres processus, il est essentiel d'avoir non -blocage de l'entrée pour empêcher le programme de se bloquer en attendant l'entrée.

Utilisation du module msvcrt (Windows)

Pour les applications console exclusives à Windows, le module msvcrt fournit une solution simple :

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

Utilisation du module termios (Linux)

Pour les applications console basées sur Linux, le module termios peut être utilisé :

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)

Utilisation du module Pygame (multiplateforme)

Si vous avez besoin d'une entrée non bloquante sur plusieurs plates-formes ou si vous souhaitez une interface utilisateur graphique, Pygame propose une solution multiplateforme :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn