Gostaria que este script Python 3.10 (onde o pynput
código é parcialmente baseado nesta resposta ) entrasse no while
loop e ao mesmo tempo monitorasse as teclas pressionadas no teclado. Quando q
é pressionado, gostaria que ele terminasse.
(Não conheço muito bem os threads, mas eles while loop
provavelmente devem ser executados no thread principal e o monitor de teclado deve ser executado em um thread filho e simultâneo).
#!/usr/bin/python3
import threading
import sys
from pynput import keyboard
def on_key_press(key):
try:
k = key.char
except:
k = key.name
if k in ['q']:
exit_time = True
exit_time = False
print("Press q to close.")
keyboard_listener = keyboard.Listener(on_press=on_key_press)
keyboard_listener.start()
keyboard_listener.join()
while not exit_time:
sleep(1)
print("Goodbye")
sys.exit(0)
Em vez disso, ele fica travado em uma espera infinita depois de keyboard_listener.start()
. Não sei se keyboard_listener.join()
não roda de jeito nenhum ou se faz com que o programa trave.
No entanto, o while
loop não é executado. Se eu terminar o programa com Ctrl+C:
^CTraceback (most recent call last):
File "/my/source/./file.py", line 22, in <module>
keyboard_listener.join()
File "/my/.local/lib/python3.10/site-packages/pynput/_util/__init__.py", line 295, in join
super(AbstractListener, self).join(timeout, *args)
File "/usr/lib/python3.10/threading.py", line 1096, in join
self._wait_for_tstate_lock()
File "/usr/lib/python3.10/threading.py", line 1116, in _wait_for_tstate_lock
if lock.acquire(block, timeout):
KeyboardInterrupt