
【Python 】キー入力でループを抜ける処理の実装方法
公開: 更新:Pythonでキー入力によるループを抜ける処理の実装方法
Pythonでキー入力をきっかけにループを抜ける方法として、「input関数を利用する方法」と「keyboardモジュールを使用する方法」が挙げられます。標準ライブラリのinput関数は追加のインストールなしで利用できるため導入しやすい一方、プログラム実行中に常にキーの押下を監視するには適していません。しかし、処理の流れを簡潔に制御する目的であれば、input関数は非常にシンプルな選択肢となります。
#【サンプルコード】
# input関数を使用したループ終了の例
while True:
print("処理を実行中...")
user_input = input("続けるには何かキーを押してください。'q'で終了: ")
if user_input.lower() == 'q':
print("ループを終了します")
break
# 【実行結果】
処理を実行中...
続けるには何かキーを押してください。'q'で終了: a
処理を実行中...
続けるには何かキーを押してください。'q'で終了: b
処理を実行中...
続けるには何かキーを押してください。'q'で終了: q
ループを終了します
input関数を使う場合、入力待ちの間はプログラムが停止状態になるため、ユーザーの操作を待機する実装には便利です。逆に実行中の別処理と同時にキー入力の監視を行いたい場合は、後述のkeyboardモジュールなど別の方法を検討する必要があります。
行番号 | 詳細説明 |
---|---|
2行目 | while Trueで無限ループを開始 |
3行目 | 現在の処理状況を示すメッセージをprint関数で出力 |
4行目 | ユーザーからの入力をinput関数で受け取りuser_inputに代入 |
5行目 | 入力値を小文字化した結果が'q'ならメッセージを表示しbreakでループを抜ける |
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
keyboardモジュールを使用したキー検出でループを抜ける処理の実装方法
keyboardモジュールは処理を実行しながらでもキーボード入力をリアルタイムで検知できるため、特定のキーが押された瞬間にループを抜けるような制御が可能です。ゲームやリアルタイム処理を伴うアプリケーションで利用されることが多く、並行して実行中の処理を止めずにキー操作を拾いたい場面に向いています。
#【サンプルコード】
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モジュールの利点はユーザーが任意のタイミングでキーを押したことを検知できる点で、リアルタイム性を要する処理に対して有効な手段です。
行番号 | 詳細説明 |
---|---|
1行目 | keyboardモジュールとtimeモジュールをインポート |
3行目 | 「qキーを押すと終了します」というメッセージを表示 |
4行目 | tryブロックを開始し、ループを継続 |
5行目 | ループ内で「処理実行中...」と出力して現状を通知 |
6行目 | time.sleep(1)で1秒待機し、ループの間隔を調整 |
8行目 | if文でkeyboard.is_pressed('q')をチェックし、押されたらbreakでループ終了 |
11行目 | KeyboardInterrupt例外(CTRL+Cなど)が発生した場合の処理を記述 |
マルチスレッドによるキー入力監視とループ制御の実装方法
より高度な方法として、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
プログラムを終了します
この方法ではkey_monitor
関数が別スレッドで動作し、ユーザーの入力を並行して監視します。メインスレッドでは本来の処理を行い、終了条件を満たすとshould_exit
をTrue
に設定することで、メインループを停止させることができます。daemonをTrue
にすることでメインスレッド終了時に監視スレッドが自動的に終了し、リソースが残留しにくくなる利点もあります。
行番号 | 詳細説明 |
---|---|
1行目 | threadingとtimeモジュールをインポート |
4行目 | ループの終了を判断するためのフラグ変数should_exitをFalseで初期化 |
6行目 | キー入力監視を行うkey_monitor関数を定義 |
8行目 | キー入力待ちの合図として"qキーを押すと終了します"を表示 |
10行目 | 無限ループでユーザー入力を取得し、内容が'q'ならshould_exitをTrueに設定してbreak |
14行目 | threading.Threadでkey_monitor関数を別スレッドとして起動 |
15行目 | daemonをTrueに設定しメインスレッド終了時に監視スレッドも終了させる |
16行目 | 監視スレッドをstartし、実行を開始 |
20行目 | メインループを開始し、should_exitがTrueになるまで処理を続ける |
22行目 | 処理内容の例としてメッセージを表示し、1秒待機してループを繰り返す |
24行目 | should_exitがTrueになったらメインループを抜けて"プログラムを終了します"を表示 |
26行目 | KeyboardInterruptが発生した場合のメッセージを表示 |
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- 【Python】仮想環境から抜ける方法
- 【Python】文字列から改行コードを除去する方法
- 【Python】10回の繰り返し処理を実装する方法
- 【Python】df(DataFrame)とは?基本的な使い方やデータ操作について解説
- 【Python】指定のファイルがあれば削除する方法
ITやプログラミングに関するニュース
- Azure SQL Managed InstanceがVector型Public Preview対応開始、AI駆動アプリケーション開発の効率化を実現
- GoogleがGmailアプリにGeminiサマリーカードを導入、メール要約の自動表示機能が利用可能に
- ZenchordとNottaが共同開発したAIイヤホンZenchord 1をMakuakeで先行公開、音声認識から議事録作成まで自動化
- Ideinが音声解析AIサービス「Phonoscape」の提供を開始、対面接客現場での会話データ活用が可能に
- Microsoftが.NET 10 Preview 4でdotnet run app.cs機能をリリース、プロジェクトファイル不要でC#実行が可能に