Учитывая фоновый процесс, который постоянно печатает на stddout, есть ли способ сделать вызов input()
«прилипать» к нижней части консоли?
import time
import multiprocessing
def print_in_background():
x = 0
while True:
print(f'Background print {x}')
x += 1
time.sleep(1)
def get_input():
return input('> ')
background_proc = multiprocessing.Process(target=print_in_background)
background_proc.daemon = True
background_proc.start()
while True:
v = get_input()
print(v)
background_proc.join()
Это работает в том, что вы может заставить фоновый поток делать вещи, пока основной поток получает входные данные, но выходные данные выглядят так, где строка input()
подталкивается выходными данными фонового процесса:
> Background print 0
Background print 1
Background print 2
I am Background print 3
typingBackground print 4
I am typing
> Background print 5
Background print 6
Теоретически, выводим так было бы предпочтительнее:
Background print 0
Background print 1
Background print 2
Background print 3
Background print 4
I am typing # From when user hit enter key
Background print 5
Background print 6
> typing in current prompt
Если это возможно, оптимальным будет оставить запрос на ввод в нижней строке консоли.