La lecture de l'entrée de raw_input() sans avoir l'invite remplacés par d'autres threads en Python

Je suis en train de permettre à l'utilisateur de saisie des commandes à la console à l'aide de raw_input(), cela fonctionne très bien. Le problème est que j'ai threads d'arrière-plan qu'à l'occasion de la sortie de log-les informations à l'écran et quand ils le font ils polluent l'invite d'entrée (depuis la sortie aller là où le curseur se trouve être en ce moment).

C'est un petit programme en Python qui illustrent ce que je veux dire.

#!/usr/bin/env python
import threading
import time

def message_loop():
    while True:
        time.sleep(1)
        print "Hello World"

thread = threading.Thread(target = message_loop)
thread.start()

while True:
    input = raw_input("Prompt> ")
    print "You typed", input

Ceci est un exemple de ce à quoi il pourrait ressembler quand je le lance:

Prompt> Hello World
Hello World
Hello World
Hello World
test
You typed test
Prompt> Hello World
Hello World
Hello World
hellHello World
o
You typed hello
Prompt> Hello World
Hello World
Hello World
Hello World

Ce que je veux, c'est pour l'invite à se déplacer le long avec la sortie du fil. Comme:

Hello World
Hello World
Prompt> test
You typed test
Hello World
Hello World
Hello World
Hello World
Hello World
Prompt> hello
You typed hello
Hello World
Hello World
Hello World
Hello World
Prompt> 

Aucune idée sur la façon d'atteindre cet objectif sans avoir recours à laide des hacks? 🙂

OriginalL'auteur Jim | 2010-01-17