ホームページ >バックエンド開発 >Python チュートリアル >Python コンソール アプリケーションでノンブロッキング ユーザー入力を実装するにはどうすればよいですか?

Python コンソール アプリケーションでノンブロッキング ユーザー入力を実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-01 01:46:09852ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。