
【Python 】キー入力でループを抜ける処理の実装方法
公開: 更新:Pythonでキー入力によるループ終了処理の実装方法
Pythonでキー入力を検知してループを終了させる方法には主に「input関数を使用する方法」と「keyboardモジュールを利用する方法」があります。input関数はPython標準ライブラリに含まれており追加インストールなしで利用できる一方、keyboardモジュールは特定のキーが押されたことをリアルタイムに検知できるためより柔軟な制御が可能です。
【サンプルコード】
# input関数を使用したループ終了の例
while True:
print("処理を実行中...")
user_input = input("続けるには何かキーを押してください。'q'で終了: ")
if user_input.lower() == 'q':
print("ループを終了します")
break
【実行結果】
処理を実行中...
続けるには何かキーを押してください。'q'で終了: a
処理を実行中...
続けるには何かキーを押してください。'q'で終了: b
処理を実行中...
続けるには何かキーを押してください。'q'で終了: q
ループを終了します
input関数を使用する方法ではプログラムが入力待ちの状態で一時停止するため、ユーザーからの入力があるまで次の処理に進みません。この特性によって処理の流れを制御しやすくなる反面、入力待ち中は他の処理を並行して実行することができないという制約があります。
input関数を使った方法はシンプルで実装が容易である反面、処理の途中でキー入力を検知するには適していません。より複雑な処理中にもキー入力を監視したい場合は、次に紹介するkeyboardモジュールの使用を検討するとよいでしょう。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
keyboardモジュールを使ったリアルタイムキー検出でのループ制御
keyboardモジュールはPythonの外部ライブラリで、キーボード入力をリアルタイムに検出することができます。このモジュールを使用すると、処理を実行しながら特定のキーが押されたことを検知し、即座にループを終了させることが可能になります。
【サンプルコード】
import keyboard
import time
print("処理を開始します。'q'キーを押すと終了します")
try:
while True:
print("処理実行中...")
# 何らかの処理
time.sleep(1) # 1秒間隔で処理
# qキーが押されたかチェック
if keyboard.is_pressed('q'):
print("qキーが押されたためループを終了します")
break
except KeyboardInterrupt:
print("プログラムが中断されました")
【実行結果】
処理を開始します。'q'キーを押すと終了します
処理実行中...
処理実行中...
処理実行中...
qキーが押されたためループを終了します
keyboardモジュールを使用するには、事前にpip install keyboard
コマンドでインストールする必要があります。このモジュールは管理者権限で実行する必要がある場合があるため、権限エラーが発生した場合は管理者としてコマンドプロンプトを実行してインストールを行うことによって解決できます。
keyboardモジュールはバックグラウンドでキー入力を監視するため、ユーザーがプログラムを実行しながらリアルタイムで特定のキーを押すことでループ制御が可能になります。この方法はゲーム開発やリアルタイム処理が必要なアプリケーションにおいて特に有効です。
マルチスレッドによるキー入力監視とループ制御の実装
より複雑なアプリケーションでは、メインの処理とキー入力の監視を別々のスレッドで実行することによって、効率的なループ制御を実現できます。threading モジュールを使用することによって、メインスレッドで処理を実行しながら、別スレッドでキー入力を監視するという高度な実装が可能です。
【サンプルコード】
import threading
import time
# グローバル変数で終了フラグを管理
should_exit = False
def key_monitor():
"""キー入力を監視するスレッド関数"""
global should_exit
print("qキーを押すと終了します")
while True:
user_input = input()
if user_input.lower() == 'q':
should_exit = True
break
# キー監視スレッドを開始
monitor_thread = threading.Thread(target=key_monitor)
monitor_thread.daemon = True # メインスレッド終了時に一緒に終了するよう設定
monitor_thread.start()
# メインループ
try:
while not should_exit:
print("メイン処理実行中...")
time.sleep(1)
print("プログラムを終了します")
except KeyboardInterrupt:
print("プログラムが中断されました")
【実行結果】
qキーを押すと終了します
メイン処理実行中...
メイン処理実行中...
メイン処理実行中...
q
プログラムを終了します
マルチスレッドアプローチでは、メイン処理とキー入力監視が並行して動作するため、どちらかの処理がブロックされることなく効率的に実行されます。スレッド間で共有するshould_exit
変数を使用することによって、キー入力があった場合にメインループに終了信号を送ることができます。
daemon属性をTrue
に設定することによって、メインスレッドが終了した際に自動的にキー監視スレッドも終了するようになります。これによりプログラム終了時にスレッドが残留する問題を防止できます。マルチスレッドを使用する方法は、複雑なアプリケーションでユーザー入力と処理を分離したい場合に適しています。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- ChatGPTでプロンプトを使うコツとNG例|シーン別のプロンプト例まで徹底解説
- ChatGPT 4oアップデートで高クオリティな画像生成が可能に!具体例や作り方、プロンプトのコツを紹介
- 【Open AI・Claude】プロンプトジェネレーターの使い方。ChatGPTで活用するコツや利用料金も併せて解説
- 【Python】@(アットマーク)の意味を簡単に解説
- 【Python】match case(match文)で複数条件を処理する方法