Heim > Backend-Entwicklung > Python-Tutorial > Wie implementiert man nicht blockierende Konsoleneingaben in Python?

Wie implementiert man nicht blockierende Konsoleneingaben in Python?

DDD
Freigeben: 2024-12-01 18:00:18
Original
950 Leute haben es durchsucht

How to Implement Non-Blocking Console Input in Python?

Nicht-blockierende Konsoleneingabe

Nicht-blockierende Konsoleneingabe ist in Anwendungen von entscheidender Bedeutung, bei denen eine gleichzeitige Interaktion mit dem Benutzer und eine kontinuierliche Verarbeitung erforderlich sind. In diesem Fall besteht das Ziel darin, diese Funktion für einen Python-IRC-Client zu implementieren.

Nicht blockierende Eingabe unter Windows

Für Windows-Systeme bietet das msvcrt-Modul eine Lösung:

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

Nicht-blockierende Eingabe an Linux

Unter Linux können die Module select, tty und termios verwendet werden:

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)
Nach dem Login kopieren

Plattformübergreifende, nicht blockierende Eingabe

Für eine plattformübergreifende Lösung oder zur Integration von GUI-Funktionalität kann Pygame geeignet sein genutzt:

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

Mit diesen Methoden können Sie nicht blockierende Konsoleneingaben in Ihren Python-Anwendungen implementieren und so eine kontinuierliche Verarbeitung ermöglichen, während Sie in Echtzeit auf Benutzereingaben reagieren.

Das obige ist der detaillierte Inhalt vonWie implementiert man nicht blockierende Konsoleneingaben in Python?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage