其中一个线程重写 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 输入,或将其发送到文件。
我对带有线程的控制台应用程序有疑问。在第一个线程中,我有一个函数,它将符号 "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 输入,或将其发送到文件。