其中一个线程重写 Python 中的控制台输入

One of threads rewrites console input in Python

我对带有线程的控制台应用程序有疑问。在第一个线程中,我有一个函数,它将符号 "x" 写入输出。在第二个线程中,我有函数,等待用户输入。 (符号"x"为本题随机选择)

例如

线程 1:


    while True:
        print "x"
        time.sleep(1)

线程 2:


    input = null
    while input != "EXIT":
        input = raw_input()
        print input

但是当我将线程 2 的文本写入控制台时,我的输入文本(例如 HELLO)被重写了。


    x
    x
    HELx
    LOx
    x
    x[enter pressed here]

    HELLO
    x
    x

有什么方法可以防止用符号 "x" 重写我的输入文本?

感谢您的回答。

在控制台中,标准输出(由 运行 程序产生)和标准输入(由您的按键产生)都发送到屏幕,因此它们最终可能会混合在一起。

此处您的线程 1 每秒按行写入 1 x,因此如果您输入 HELLO 的时间超过 1 秒,那么这将产生您提交的控制台输出。

如果你想避免这种情况,一些非详尽的建议:

  • 检测到按键时暂时中断线程 1 输出

  • 使用 ncurses 等库为程序输出和用户输入创建单独的区域

  • 只抑制线程 1 输入,或将其发送到文件。