コンソールへのデータ出力時にカーソルキー移動できたらなぁっと思い,調べた結果,
キーボードからキー入力はPython標準のライブラリmsvcrt
でできるとのこと.
単純にキー入力を読み込むだけなら,以上のモジュールのimportでよいってことです.
tkinter
といったGUIモジュールは必要ナイデス.
それじゃあ使ってみましょう.
まず,msvcrt
をimportします.
あとはmsvcrt.getch()
を実行するだけ.
msvcrt.getch()
がキー入力を補足し,入力によってバイト文字列を返します.
while
ループ内でmsvcrt.getch()
を実行すれば,永遠にキー入力を受け取ることができるわけです.
以下のような感じです.
ちなみにPrtScや半角全角キー,Alt,Ctrlキー単体とかではmsvcrt.getch()
は反応しません(値を返さない).
import msvcrt while True: key = msvcrt.getch() # キー入力を受け取る # ファンクションキーやカーソルキーなど特殊なキー入力の場合 if key == b'\xe0': # 再度キー入力読み込みを実行する必要あり key = msvcrt.getch() if key == b'H': # カーソルキー上 # 適当に処理を elif key == b'P': # カーソルキー下 # 適当に処理を elif key == b'M': # カーソルキー右 # 適当に処理を elif key == b'K': # カーソルキー左 # 適当に処理を elif key == b';': # ファンクション1 # 適当に処理を elif key == b'<': # ファンクション2 # 適当に処理を elif key == b'S': # Deleteキー # 適当に処理を # 全角(日本語)入力の時:Enterを押して入力文字を決定し,読み込み # 二文字以上の入力はできないっぽい elif key == b'\x82': # 再度キー入力読み込みを実行する必要あり key = msvcrt.getch() if key == b'\x91': # q(全角文字) # 適当に処理を elif key == b'\xa0': # あ # 適当に処理を elif key == b'\xed': # わ # 適当に処理を # 上記で漢字入力を試したが,なんかよく分からん... # 別の漢字だと最初の読み込みも違う. elif key == b'\x88': # 再度キー入力読み込みを実行する必要あり key = msvcrt.getch() if key == b'\xf3': # 印 # 適当に処理を # 通常のキー入力 elif key == b'\r': # Enterキー # 適当に処理を elif key == b'\x08': # Backspaceキー # 適当に処理を elif key == b'q': # Qキー(半角(英字)入力の時) # 適当に処理を elif key == b'Q': # Shift+Qキー(半角(英字)入力の時) # 適当に処理を elif key == b'\x03': # Ctrl+C # 適当に処理を elif key == b'\x1a': # Ctrl+Z # 適当に処理を elif key == b'\x16': # Ctrl+V # 適当に処理を elif key == b'1': # テンキーの1 # 適当に処理を elif key == b'+': # テンキーの+ # 適当に処理を