pynput (「pijnput」は痛みの穴に変換されます :-) ) モジュールを使用してキーボードをキャプチャしようとしています。この私のコード:
class KeyPress:
def __init__(self,parent):
self.parent=parent
def on_press(self,key):
#keyboard.Listener.stop()
try:
self.parent.pressedKey=key.char
self.parent.pressedKeyCode=None
except AttributeError:
self.parent.pressedKey=key
self.parent.pressedKeyCode=key.value.vk
return False
def on_release(self,key):
if key == keyboard.Key.esc:
# Stop listener
return False
# Collect events until released
def run(self):
with keyboard.Listener(
on_press=self.on_press,
on_release=self.on_release,suppress=True) as listener:
listener.join()
キーとキーコードをメイン クラスのプロパティに割り当てるサブクラスを作成します。これを実行すると、特定の数のキーを押してから X がクラッシュし、このエラーが発生するまで問題なく動作します。最初はこれをipython + tmuxで実行しましたが、純粋なbashでもこれが発生します。
Exception in thread Thread-131:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/site-packages/pynput/_util/__init__.py", line 136, in run
self._run()
File "/usr/lib/python3.7/site-packages/pynput/keyboard/_xorg.py", line 499, in _run
super(Listener, self)._run()
File "/usr/lib/python3.7/site-packages/pynput/_util/xorg.py", line 370, in _run
self._display_record = Xlib.display.Display()
File "/usr/lib/python3.7/site-packages/Xlib/display.py", line 89, in __init__
self.display = _BaseDisplay(display)
File "/usr/lib/python3.7/site-packages/Xlib/display.py", line 71, in __init__
protocol_display.Display.__init__(self, *args, **keys)
File "/usr/lib/python3.7/site-packages/Xlib/protocol/display.py", line 163, in __init__
auth_prot_data = auth_data)
File "/usr/lib/python3.7/site-packages/Xlib/protocol/display.py", line 1070, in __init__
display.send_and_recv(request = -1)
File "/usr/lib/python3.7/site-packages/Xlib/protocol/display.py", line 610, in send_and_recv
raise self.socket_error
Xlib.error.ConnectionClosedError: Display connection closed by server
私の推測では、スレッドを終了しないため、スレッドを作成しすぎていると思います。「with」構造がそれを処理すると思いましたが?これは正しいです ?もしそうなら、私はそれを機能させるために何をすべきですか?
前もって感謝します