Here another option.
Maybe better just use class method.
from threading import Thread class Input: def __init__(self, message, timeout): self.response = None print('You have {0} seconds to answer'.format(timeout)) thread = Thread(target=self.do_input, args=(message,)) thread.start() # wait for a response thread.join(timeout) # closing input after timeout if self.response is None: print('\nTimes up. Press enter to continue') thread.join() # clear response from enter key self.response = None def do_input(self, message): self.response = input(message) # optional def get(self): return self.response def main(): r = Input('Type anything >> ', 2).get() print(r) r = Input('Type anything >> ', 3) print(r.response) main()
Maybe better just use class method.
from threading import Thread class Input: _response = None # internal use only @classmethod def timeout(cls, message, timeout): cls._response = None print('You have {0} seconds to answer'.format(timeout)) thread = Thread(target=cls.do_input, args=(message,)) thread.start() # wait for a response thread.join(timeout) # closing input after timeout if cls._response is None: print('\nTimes up. Press enter to continue') thread.join() # clear response from enter key cls._response = None return cls._response @classmethod def do_input(cls, message): cls._response = input(message) def main(): r = Input.timeout('Type anything >> ', 2) print(r) r = Input.timeout('Type anything >> ', 3) print(r) main()
99 percent of computer problems exists between chair and keyboard.