Liest Eingaben von raw_input (), ohne dass die Eingabeaufforderung von anderen Threads in Python überschrieben wird

Ich versuche, die Benutzereingabebefehle an einer Konsole mit raw_input () zuzulassen, dies funktioniert einwandfrei. Das Problem ist, dass ich Hintergrund-Threads habe, die gelegentlich Protokollinformationen auf dem Bildschirm ausgeben und wenn sie dies tun, die Eingabeaufforderung durcheinander bringen (da die Ausgabe dorthin geht, wo sich der Cursor gerade befindet).

Dies ist ein kleines Python-Programm, das zeigt, was ich meine.

#!/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

Dies ist ein Beispiel dafür, wie es aussehen könnte, wenn ich es ausführe:

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

Ich möchte, dass die Eingabeaufforderung mit der Ausgabe des Threads mitläuft. Wie so:

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> 

Irgendwelche Ideen, wie dies erreicht werden kann, ohne auf hässliche Hacks zurückzugreifen? :)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage