我正在使用交互式控制台编写多线程程序:
def console()
import readline
while True:
data = input()
do_whatever(data.split())
但是,我正在使用的库从其他线程运行回调。回调需要打印到控制台。因此,我想清除命令行,重新显示提示,然后重新显示命令行。
在不重新实现readline
的情况下,我该怎么做?
答案 0 :(得分:0)
从解决C问题的this answer开始,我得出了以下Python代码,这些代码足以满足我的目的:
import os
import readline
import signal
import sys
import time
import threading
print_lock = threading.Lock()
def print_safely(text):
with print_lock:
sys.stdout.write(f'\r\x1b[K{text}\n')
os.kill(os.getpid(), signal.SIGWINCH)
def background_thread():
while True:
time.sleep(0.5)
print_safely('x')
threading.Thread(target=background_thread, daemon=True).start()
while True:
try:
inp = input(f'> ')
with print_lock:
print(repr(inp))
except (KeyboardInterrupt, EOFError):
print('')
break
print_safely
\r\x1b[K
( CR + CSI code EL )删除现有的Readline提示可能的剩余问题: