2010-07-02 14 views
7

¿Hay alguna manera de interrumpir programáticamente la entrada raw_input de Python? Específicamente, me gustaría presentar un aviso al usuario, pero también escuchar en un descriptor de socket (usando select, por ejemplo) e interrumpir el prompt, mostrar algo, y volver a mostrar el prompt si los datos entran en el socket.Programáticamente interrumpir raw_input

La razón para usar raw_input en lugar de simplemente seleccionar en sys.stdin es que me gustaría usar el módulo readline para proporcionar la funcionalidad de edición de línea para el prompt.

Respuesta

3

Por lo que sé ... "Más o menos".

raw_input está bloqueando así que la única forma en que puedo pensar es engendrar un subproceso/hilo para recuperar la entrada, y luego simplemente comunicarme con el subproceso/subproceso. Es un truco bastante sucio (al menos así me parece), pero debería funcionar en varias plataformas. La otra alternativa, por supuesto, es usar el módulo curses en Linux o obtener this one para Windows.

+0

Actualmente estoy enfrentando el mismo problema. Pensé en la primera solución (llamar a raw_input() en otro hilo), sin embargo después de buscar descubrí que todavía no hay forma de interrumpirlo, porque incluso después de generar una excepción de un hilo en otro diferente (http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) no va a morir, cuando está ocupado con la llamada al sistema (y raw_input() clasifica como uno, ¿no? ?) ... :( – Sushi271

Cuestiones relacionadas