Чтение ввода из raw_input () без переписывания приглашения другими потоками в Python

Я пытаюсь позволить пользователю вводить команды на консоли, используя raw_input (), это работает нормально. Проблема в том, что у меня есть фоновые потоки, которые время от времени выводят информацию журнала на экран, и когда они ошибаются, вводят подсказку ввода (так как вывод идет туда, где в данный момент находится курсор).

Это небольшая программа на Python, иллюстрирующая, что я имею в виду.

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

Это пример того, как это может выглядеть, когда я запускаю его:

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

Я хочу, чтобы подсказка двигалась вместе с выводом из потока. Вот так:

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> 

Любые идеи о том, как этого добиться, не прибегая к безобразным взломам? :)

Ответы на вопрос(4)

Ваш ответ на вопрос