Maison >développement back-end >Tutoriel Python >Comment implémenter une entrée de console non bloquante en Python ?

Comment implémenter une entrée de console non bloquante en Python ?

DDD
DDDoriginal
2024-12-01 18:00:18953parcourir

How to Implement Non-Blocking Console Input in Python?

Entrée de console non bloquante

L'entrée de console non bloquante est cruciale dans les applications où une interaction simultanée avec l'utilisateur et un traitement continu sont nécessaires. Dans ce cas, l'objectif est d'implémenter cette fonctionnalité pour un client Python IRC.

Entrée non bloquante sous Windows

Pour les systèmes Windows, le module msvcrt fournit un solution :

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

Entrée non bloquante sous Linux

Activé Linux, les modules select, tty et termios peuvent être utilisés :

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':
                break

finally:
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)

Entrée non bloquante multiplateforme

Pour une solution multiplateforme ou pour intégrer la fonctionnalité GUI, Pygame peut être utilisé :

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

Avec ces méthodes, vous pouvez implémenter une entrée de console non bloquante dans votre Applications Python, permettant un traitement continu tout en répondant aux entrées de l'utilisateur en temps réel.

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