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

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

Susan Sarandon
Libérer: 2024-12-02 14:10:13
original
1003 Les gens l'ont consulté

How to Get Non-Blocking Console Input in Python?

Obtenir une entrée non bloquante dans la console

Lors de la création d'applications interactives, il est souvent nécessaire d'accepter les entrées de l'utilisateur sans interrompre les processus en cours. Cela se produit dans des situations telles que le développement de clients IRC, où une boucle reçoit et interprète en permanence les réponses du serveur.

Énoncé du problème

En Python, l'utilisation de raw_input pour l'entrée de la console arrête la boucle. jusqu'à ce que l'utilisateur fournisse une entrée. Pour obtenir une saisie non bloquante, nous avons besoin d'une approche alternative.

Solutions

Pour les utilisateurs Windows travaillant uniquement avec la saisie de la console, le module msvcrt est disponible :

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

Pour les environnements Linux, le module termios propose une solution :

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

Pour les plateformes跨ou lorsque vous incluez une interface graphique dans votre application, Pygame est une option polyvalente :

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

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal