Entrée de console non bloquante : déverrouillage de la gestion asynchrone
Considérez le scénario suivant : vous créez un client IRC en Python et avez établi une boucle pour recevoir et analyser les données du serveur. Cependant, lorsque vous utilisez raw_input pour saisir du texte, la boucle s'arrête brusquement jusqu'à ce que votre saisie soit terminée. Cette interruption gêne le bon fonctionnement de la boucle.
Pour relever ce défi et maintenir l'exécution continue de la boucle, différentes méthodes de saisie non bloquantes sont disponibles :
Pour Windows (Console uniquement ):
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
Pour Linux :
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)
Pour multiplateforme ou interface graphique Intégration :
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
En adoptant ces techniques de saisie non bloquantes, vous pouvez intégrer de manière transparente les interactions des utilisateurs en temps réel sans perturber le flux de votre boucle IRC.
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!