Python: espere la entrada del usuario, y si no hay entrada después de 10 minutos, continúe con el progtwig

Lo intenté:

from time import sleep while sleep(3): input("Press enter to continue.") 

Pero no parece funcionar. Quiero que el progtwig espere la entrada del usuario, pero si no hay entrada del usuario después de 10 minutos, continúe con el progtwig de todos modos.

Esto es con python 3.

¿Por qué el código no funciona?

time.sleep no devuelve nada; el valor de time.sleep(..) convierte en None ; while cuerpo del bucle no se ejecuta.

Cómo resolverlo

Si estás en Unix, puedes usar select.select .

 import select import sys print('Press enter to continue.', end='', flush=True) r, w, x = select.select([sys.stdin], [], [], 600) 

De lo contrario, debe utilizar hilo.

Solución específica de Windows que utiliza msvcrt :

 import msvcrt import time t0 = time.time() while time.time() - t0 < 600: if msvcrt.kbhit(): if msvcrt.getch() == '\r': # not '\n' break time.sleep(0.1) 

Aquí hay una forma sencilla de utilizar una alarma. Cuando el tiempo expira, se llama a la función lambda, que genera un ZeroDivisionError

 from signal import signal, alarm, SIGALRM signal(SIGALRM, lambda x:1/0) try: alarm(600) input("Press enter to continue.") except ZeroDivisionError: print("timed out") 

Otra forma de hacerlo es esta:

 from time import sleep print("I'm executing") try: print("Wake up Ctrl-C!") sleep(600) except KeyboardInterrupt: print("I woke up!") else: print("I'm executing again.") 

No es la mejor de las respuestas y definitivamente se siente como un abuso de excepciones, pero funciona.