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
Libérer: 2024-12-01 18:00:18
original
958 Les gens l'ont consulté

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
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal