Saliendo del bucle while presionando enter sin bloquear. ¿Cómo puedo mejorar este método?

Así que he estado leyendo un poco sobre cómo salir de un bucle while mientras el usuario presiona la tecla Intro y se me ocurre lo siguiente:

import sys, select, os switch = 1 i = 1 while switch == 1: os.system('cls' if os.name == 'nt' else 'clear') print "I'm doing stuff. Press Enter to stop me!" print i while sys.stdin in select.select([sys.stdin], [], [], 0)[0]: line = raw_input() if not line: print "Finished! =]" switch = 0 else: print "Finished! =]" switch = 0 i = i+1 

¿Hay alguna manera de arreglar esto? En particular, “si no es línea” y el siguiente “else” se ve desordenado. ¿Se pueden combinar en uno? ¿Una mejor alternativa al uso de “switch”?

Inicialmente, si escribía un montón de caracteres y luego pulsa enter, no se detiene el bucle. Tendría que presionar enter de nuevo. Los componentes if if y else están diseñados para configurarlo de modo que salga en la primera pulsación de enter.

Esto funcionó para mí:

 import sys, select, os i = 0 while True: os.system('cls' if os.name == 'nt' else 'clear') print "I'm doing stuff. Press Enter to stop me!" print i if sys.stdin in select.select([sys.stdin], [], [], 0)[0]: line = raw_input() break i += 1 

Solo necesita verificar si la entrada estándar se ingresa una vez (ya que la primera entrada terminará el ciclo). Si las condiciones línea / no línea tienen resultado para usted, puede combinarlas en una sentencia if. Luego, con solo una sentencia while utilizada, ahora puede usar break lugar de establecer una marca.