是否可以让 python input() 粘在控制台底部 window 而其他进程打印输出?
Is it possible to make python input() stick to bottom of console window while other processes print output?
给定一个不断打印到 stddout 的后台进程,是否有办法将对 input()
"stick" 的调用发送到控制台底部?
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
如果可能的话,让输入提示保持在控制台的底行是最优的。
我使用 Python stdlib 中的 Curses 库创建了两个 windows:一个用于输出,另一个具有用户可以输入的文本框。
给定一个不断打印到 stddout 的后台进程,是否有办法将对 input()
"stick" 的调用发送到控制台底部?
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
如果可能的话,让输入提示保持在控制台的底行是最优的。
我使用 Python stdlib 中的 Curses 库创建了两个 windows:一个用于输出,另一个具有用户可以输入的文本框。