I'd like my code to listen for user input, and do something if key c
is pressed, and something else if key v
is pressed.
I've managed to do it using global
, but it feels like an ugly hack :
from pynput import keyboard
def on_press(key):
try:
global user_input
if key.char == "c":
user_input = "c"
elif key.char == "v":
user_input == "v"
except AttributeError:
pass
def on_release(key):
if key == keyboard.Key.esc:
# Stop listener
return False
def wait_for_user_input():
global user_input
listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start()
user_input = 0
while user_input == 0:
time.sleep(0.5)
if user_input == "c":
# do something
listener.stop()
break
elif user_input == "v":
# do something else
listener.stop()
break
# other stuff
wait_for_user_input()
Is there a better way to do it ? (Maybe by having the listener stop & return the values c
or v
in on_press()
? If so, I couldn't find how to do it.)
Also : since wait_for_user_input()
will be called multiple times, would it be better to not start and stop the listener repetitively, and instead have it start once and stop once ?