ホームページ >バックエンド開発 >Python チュートリアル >Python コンソール アプリケーションでノンブロッキング ユーザー入力を実装するにはどうすればよいですか?
コンソール アプリケーションでのユーザー入力をブロックしない
他のプロセスと同時にユーザー入力を必要とするコンソール アプリケーションを構築する場合、ブロックしないことが重要です。 - 入力をブロックして、入力待機中にプログラムがフリーズするのを防ぎます。
使用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 サイトの他の関連記事を参照してください。