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? :)