в асинхронном или в многопоточном коде print и input пересекаются. python

У меня есть код.

import threading
from time import sleep


def runner():
    sleep(1)
    while True:
        print('Message')
        sleep(1.5)


t = threading.Thread(target=runner, daemon=True).start()

while True:
    try:
        data = input('>>> ')
        print(data)
    except KeyboardInterrupt:
        break

В цикле который находится в основном потоке программы, код спрашивает input и его выводит. Но бывают такие моменты(в нашем случае раз в 1.5 секунду) когда другой поток выводит сообщение "Message". И input "перемешивается" с этим сообщением.
Т.е консоль будет выглядеть как-то так:
">>> message" + нужно нажать на Enter что-бы прокрутить цикл дальше.
Я хочу добиться такого поведения в консоли:
'>>> {}'# программа спрашивает input, если пользователь что ввёл, но не нажал Enter то вместо {} будут эти данные.
'Message'#тут просто код выводит сообщение
'>>> {}'тут все началось по новой(программа спрашивает input), но вместо {} должны быть данные со старого input.

Примеры:

  1. '>>> text' #Enter hasn't been touched
    Message
    '>>> text'
  2. '>>> text' #Enter has been touched
    text
    Message
    '>>> '

Ответы (1 шт):

Автор решения: JopaBoga

Каждые 1,5 секунды будет предлагать ввести фразу. Соответственно принцип такой же, только тебе надо просто понять, как перехватит input

import threading
from time import sleep

x = False

def runner():
    global x
    sleep(1)
    while True:
        if not x:
           print('Напишите сообщение')
        sleep(1.5)


t = threading.Thread(target=runner, daemon=True).start()

while True:
    try:  
        x = False      
        data = input('>>> ')        
        print(data)
        x = True
    except KeyboardInterrupt:
        break
→ Ссылка