【Python】キーボード入力を検知するinput()とkeyboardライブラリについて

【Python】キーボード入力を検知するinput()とkeyboardライブラリについて

公開: 更新:

Pythonでキーボード入力を検知する方法として、以下2つの手法が考えられます。

  • 組み込み関数`input()`を使用する方法
  • 第三者ライブラリを使用する方法

上記2つの手法について、簡単に解説していきます。



`input()`関数を使用したキーボード入力の取得

`input()`関数はPythonの組み込み関数で、キーボードからの文字列入力を取得できます。

【サンプルコード】
user_input = input("文字列を入力してください: ")
print(f"入力された文字列: {user_input}")

user_input = input("文字列を入力してください: ")は、キーボードからの入力を`user_input`という変数に保存します。

print(f"入力された文字列: {user_input}")は、キーボードから入力された文字列を表示します。

「Python」を学べるコードキャンプのサービス

第三者ライブラリ`keyboard`を使用したキーボード入力の検知

`keyboard`は、キーボード入力を検知するためのライブラリです。

ライブラリのインストールは、`pip3 install keyboard`コマンドで行えます。

【サンプルコード】
import keyboard

while True:
    if keyboard.is_pressed('q'):  # 'q'キーが押された場合
        print("qキーが押されました")
        break

import keyboardは、`keyboard`ライブラリをインポートします。

while True:は無限ループを作成し、キーボード入力を常時監視できます。

if keyboard.is_pressed('q'):は、'q'キーが押されたかを検知し、print("qキーが押されました")は、'q'キーが押されたことを確認するためのメッセージを表示します。

breakは、'q'キーが押された場合に無限ループを終了する役割です。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


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

ブログに戻る

2件のコメント

コメントありがとうございます。

頂いたコメントのような現象が起こってしまう原因として、この関数を使ってキー入力を取得した後、input()関数でユーザーからの入力を待つと、keyboard.read_key()で取得したキー入力がinput()の入力バッファに残ってしまっていることが考えられます。
これは、keyboardライブラリが低レベルのキーイベントを扱っているために起こる現象です。

この問題を解決するための一つの方法は、input()を呼び出す前にキーボードバッファをクリアすることです。
しかし、Python標準ライブラリにはバッファを直接クリアする機能はありませんので、一つの解決策としてkeyboardライブラリを使ってinput()関数の代わりに、以下のような独自の入力関数を作成することです。

【サンプルコード】
import keyboard

def custom_input(prompt):
print(prompt, end=‘’, flush=True)
user_input = ’’
while True:
key = keyboard.read_key()
if key == ‘enter’:
print() # 改行を出力
break
elif key == ‘backspace’:
user_input = user_input[:-1] # 一文字削除
print(‘\b \b’, end=‘’, flush=True) # カーソルを一つ戻してスペースで上書き、再びカーソルを戻す
else:
user_input += key
print(key, end=’’, flush=True)
return user_input

kb = keyboard.read_key()
print(“You pressed:”, kb)

user_input = custom_input("Enter something: “)
print(”You entered:", user_input)
-—————————————

このcustom_input関数は、ユーザーが入力する各キーをkeyboard.read_key()を使って取得し、enterキーが押されるまで文字列を構築します。
これにより、標準のinput()関数を使用しないため、前に取得したキー入力が入力バッファに残る問題を避けることができます。

ただし、この方法はkeyboardライブラリの機能をフルに活用しており、特定の状況や環境では期待通りに動作しない可能性があります。
また、特別なキー(例えば矢印キーなど)のハンドリングや文字列入力の細かい制御には追加のロジックが必要になる場合があるので、一度試してみていただければと思います。

trends.編集部

python で kb=keyboard.read_key() で押下キーを kb に取り込んだあと
input()の入力待ちで勝手に上記 kb で取り込んだ文字が表示
されて困惑しています。input()の前に kb="" としても del kb
としても同じです。対処法があればご教示下さい。

前原弘美

コメントを残す

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

コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア 中途採用者向けのIT・プログラミング研修 - IT・プログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

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

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

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

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

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

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