I have a python script in Raspbian that loops indefinitely and sleeps for 15 minutes between the main function executions. Main is threaded but usually takes 3 seconds to run. I don’t want any code to interrupt, when in time, the next call is made. During sleep I would like to detect keypress ‘r’ to optionally start another func, possibly threaded as well.
I tried the pynput module but got weird pauses that seem to be related to threading and checking in with VNC, that I need. I also tried regular old input inside a thread but couldn’t get the thread to end without user input.
The keyboard module works great in Windows but detects no keys for Raspbian. I am running the script using sudo “sudo python3 scriptname.py” I don’t really care if the key detection is instant by using threads. I can chop up my sleep cycle to call the function after a minute or so if needed. I just can’t have a big pause.
import time import keyboard import threading def mainFunc(): print('does stuff') def keyFunc(): print('do key detect stuff') while True: t1 = threading.Thread(target=mainFunc) t1.start() time.sleep(60) t1.join() keyboard.on_press_key("r", lambda _:keyFunc()) for _ in range(14): time.sleep(60) keyboard.unhook_all()
Advertisement
Answer
def inputDaemon(): while True: x = input('r to reload') if x == 'r': doTheFunc() inpD = threading.Thread(target=inputDaemon) inpD.daemon = True inpD.start()
What I eventually used and it’s been working fine.