python - 在命令行应用程序中打印标准输出而不覆盖待处理的用户输入

标签 python bash shell scripting stdout

在基本的 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/

相关文章:

python - 使用自定义语料库在 NLTK 中训练 NER 模型

python - Python 中 'wb' 文件模式下的 FileNotFoundError?

linux - 查找包含并替换为的行

java - 如何在 Linux shell 中接受左/右/上/下箭头输入?

regex - grep 和替换只能工作一半

python - Python 与 MySQL 连接时出错

python - 将 pandas 数据框列标签从浮点转换为整数

linux - 如何在 Linux 中创建回显设备?

regex - 用于查找此格式数字 num :num:num:num 的数字的正则表达式

linux - 减去linux中含有空格的时间戳