Python: raw_input e imprimir en un hilo

Tengo un hilo que puede imprimir algo de texto en la consola y el progtwig principal tiene un raw_input para controlar el hilo.

Mi problema es cuando estoy escribiendo y el hilo también me sale algo como esto:

 -->whatiwWHATTHETHREADWRITErite 

Pero me gustaría conseguir algo como esto.

 WHATTHETHREADWRITE -->whatiwrite 

¡Gracias!

Tienes que sincronizar tu entrada con la salida del hilo para evitar que se produzcan al mismo tiempo.

Puede modificar el bucle principal como:

 lock = threading.lock() while 1: raw_input() # Waiting for you to press Enter with lock: r = raw_input('--> ') # send your command to the thread 

Y luego bloquear la impresión de hilo de fondo:

 def worker(lock, ...): [...] with lock: print('what the thread write') 

En resumen, cuando Press Enter , detendrá la secuencia y entrará en el “modo de entrada”.

Para ser más específicos, cada vez que Press Enter :

  • esperar que la cerradura esté disponible
  • adquirir la cerradura
  • imprimir --> y esperar su comando
  • inserta tu comando
  • envía ese comando al hilo
  • libere la cerradura

Por lo tanto, su hilo se detendrá solo si intenta imprimir cuando está en “modo de entrada” ,
y en tu terminal obtendrás algo como:

 some previous output ---> your input THE THREAD OUTPUT 

Puede crear un locking y realizar todas las entradas y salidas mientras mantiene el locking:

 import threading stdout_lock = threading.Lock() with stdout_lock: r = raw_input() with stdout_lock: print "something" 

Use algo como curses para escribir el resultado de la tarea en segundo plano en la mitad de la pantalla y su contenido de entrada / control en la otra mitad.

También puede jugar con los códigos de escape ANSI en la mayoría de los terminales.