Чтение ввода из 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>
Любые идеи о том, как этого добиться, не прибегая к безобразным взломам? :)