Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich nicht blockierende Konsoleneingaben in Python für Echtzeitanwendungen implementieren?

Wie kann ich nicht blockierende Konsoleneingaben in Python für Echtzeitanwendungen implementieren?

Susan Sarandon
Freigeben: 2024-12-04 05:07:14
Original
778 Leute haben es durchsucht

How Can I Implement Non-Blocking Console Input in Python for Real-Time Applications?

Nicht blockierende Konsoleneingabe: Asynchrone Handhabung freischalten

Stellen Sie sich das folgende Szenario vor: Sie erstellen einen IRC-Client in Python und haben ihn eingerichtet eine Schleife zum Empfangen und Analysieren von Daten vom Server. Wenn Sie jedoch raw_input zum Eingeben von Text verwenden, wird die Schleife abrupt angehalten, bis Ihre Eingabe abgeschlossen ist. Diese Unterbrechung behindert das reibungslose Funktionieren der Schleife.

Um diese Herausforderung zu bewältigen und die kontinuierliche Ausführung der Schleife aufrechtzuerhalten, stehen verschiedene nicht blockierende Eingabemethoden zur Verfügung:

Für Windows (nur Konsole). ):

  • Verwenden Sie msvcrt Modul:
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
Nach dem Login kopieren

Für Linux:

  • Nutzen Sie das Termios-Modul wie in diesem Artikel beschrieben:
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)
Nach dem Login kopieren

Für Cross-Platform oder GUI Integration:

  • Embrace Pygame:
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
Nach dem Login kopieren

Durch die Übernahme dieser nicht blockierenden Eingabetechniken können Sie Benutzerinteraktionen in Echtzeit nahtlos integrieren, ohne die zu unterbrechen Fluss Ihrer IRC-Schleife.

Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Konsoleneingaben in Python für Echtzeitanwendungen implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage