首頁 >後端開發 >Python教學 >如何在 Python 控制台應用程式中實現非阻塞使用者輸入?

如何在 Python 控制台應用程式中實現非阻塞使用者輸入?

Susan Sarandon
Susan Sarandon原創
2024-12-01 01:46:09851瀏覽

How Can I Implement Non-Blocking User Input in Python Console Applications?

控制台應用程式中的非阻塞使用者輸入

在建置需要與其他行程同時進行使用者輸入的控制台應用程式時,必須具有非阻塞性- 阻止輸入以防止程式在等待輸入時凍結。

使用msvcrt模組(Windows)

對於Windows 獨有的控制台應用程序,msvcrt 模組提供了一個簡單的解決方案:

import msvcrt

# Define variables
num = 0
done = False

# Infinite loop
while not done:
    # Print and increment number
    print(num)
    num += 1

    # Check for keyboard input
    if msvcrt.kbhit():
        # Display pressed key and quit
        pressed_key = msvcrt.getch()
        print("You pressed", pressed_key, "so now I will quit")
        done = True

使用termios 模組(Linux)

對於基於Linux 的控制台應用程序,termios 模組可以是利用:

import sys, select, tty, termios

# Define utility function to check for keyboard input
def isData():
    return select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], [])

# Configure terminal settings for non-blocking input
old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())

# Infinite loop
num = 0
while 1:
    # Print and increment number
    print(num)
    num += 1

    # Check for keyboard input
    if isData():
        # Read single character from keyboard
        c = sys.stdin.read(1)
        # Check for escape key to quit
        if c == '\x1b':
            break

# Restore terminal settings
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)

使用Pygame 模組(跨平台)

如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您🎜>如果您需要跨多個平台的非阻塞輸入或想要圖形使用者介面,Pygame提供跨平台解決方案:

import pygame
from pygame.locals import *

# Define variables
num = 0
done = False

# Initialize Pygame
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)

# Infinite loop
while not done:
    # Display number
    display(str(num))
    num += 1

    # Check for events (e.g., keyboard input)
    pygame.event.pump()
    keys = pygame.key.get_pressed()

    # Check for escape key to quit
    if keys[K_ESCAPE]:
        done = True

以上是如何在 Python 控制台應用程式中實現非阻塞使用者輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn