【Python 】キー入力でループを抜ける処理の実装方法

【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_exitTrueに設定することで、メインループを停止させることができます。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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する