などの巨大な肥大化したモジュールを使用せずに、Python でキー リスナーを実行する方法はありますpygame
か?
例として、aキーを押すとコンソールに出力されます
a キーが押されました。
また、矢印キー/スペースバー/シフト キーもリッスンする必要があります。
などの巨大な肥大化したモジュールを使用せずに、Python でキー リスナーを実行する方法はありますpygame
か?
例として、aキーを押すとコンソールに出力されます
a キーが押されました。
また、矢印キー/スペースバー/シフト キーもリッスンする必要があります。
残念ながら、それを行うのはそれほど簡単ではありません。ある種のテキスト ユーザー インターフェイスを作成しようとしている場合は、curses
. 端末で通常行うように表示したいが、そのような入力が必要な場合はtermios
、残念ながら Python でのドキュメントが不十分なように見える を使用する必要があります。ただし、残念ながら、これらのオプションはどちらもそれほど単純ではありません。さらに、Windows では機能しません。それらを Windows で動作させる必要がある場合は、.pywin32ではなく、またはpywin32の代わりにPDCursesを使用する必要があります。curses
termios
私はこれをまともに機能させることができました。入力したキーの 16 進数表現を出力します。あなたの質問のコメントで言ったように、矢印はトリッキーです。私はあなたが同意すると思います。
#!/usr/bin/env python
import sys
import termios
import contextlib
@contextlib.contextmanager
def raw_mode(file):
old_attrs = termios.tcgetattr(file.fileno())
new_attrs = old_attrs[:]
new_attrs[3] = new_attrs[3] & ~(termios.ECHO | termios.ICANON)
try:
termios.tcsetattr(file.fileno(), termios.TCSADRAIN, new_attrs)
yield
finally:
termios.tcsetattr(file.fileno(), termios.TCSADRAIN, old_attrs)
def main():
print 'exit with ^C or ^D'
with raw_mode(sys.stdin):
try:
while True:
ch = sys.stdin.read(1)
if not ch or ch == chr(4):
break
print '%02x' % ord(ch),
except (KeyboardInterrupt, EOFError):
pass
if __name__ == '__main__':
main()
Python でキー リスナーを実行する方法があります。この機能は、pynputを通じて利用できます。
コマンドライン:
$ pip install pynput
Python コード:
from pynput import keyboard
# your code here