在基本的 Unix-shell 应用程序中,如何在不干扰任何待处理的用户输入的情况下打印到标准输出。
例如下面是一个回显用户输入的简单 Python 应用程序。在后台运行的线程每 1 秒打印一个计数器。
import threading, time
class MyThread( threading.Thread ):
running = False
def run(self):
self.running = True
i = 0
while self.running:
i += 1
time.sleep(1)
print i
t = MyThread()
t.daemon = True
t.start()
try:
while 1:
inp = raw_input('command> ')
print inp
finally:
t.running = False
请注意线程如何在用户键入时破坏显示的用户输入(例如 hell1o wo2rld3)。您将如何解决这个问题,以便 shell 写入新行,同时保留用户当前键入的行?
最佳答案
您必须将代码移植到某种控制终端的方式,这种方式比电传打字机稍微好一点——例如与 curses Python 标准库中的模块,或者在发出输出之前将光标移开的其他方法,然后将其移回用户忙于输入内容的位置。
关于python - 在命令行应用程序中打印标准输出而不覆盖待处理的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2440387/