Можно ли заставить python input () придерживаться нижней части окна консоли, в то время как другие процессы печатают вывод? - PullRequest
0 голосов
/ 30 января 2020

Учитывая фоновый процесс, который постоянно печатает на 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

Если это возможно, оптимальным будет оставить запрос на ввод в нижней строке консоли.

1 Ответ

0 голосов
/ 08 февраля 2020

Я использовал библиотеку Curses в Python stdlib, чтобы создать два windows: один для вывода и один с учебником, в который пользователь может печатать.

...