input
в питоне получает данные от пользователя только по нажатию Enter. Тоесть пока не нажат Enter, введенный текст находится в буфере терминала и недоступен программе. Можно начать с того что подвязаться на нажатия клавишь а не на ввод полной строки и собирать введенные сообщения вручную в программе. В момент когда надо вывести новое сообщение в лог: откатываем каретку на начало строки (
\r
), выводим сообщение лога, переносим строку, выводим буфер неоконченного сообщения пользователя.
Но если требуется чуть больше чем принимать пару сообщений от пользователя, рекомендую посмотреть в сторону
ncurses. Это библиотека для создания терминальных интерфейсов. Там же из коробки есть обработка комбинаций клавишь и псевдографика.