【发布时间】:2020-01-16 16:48:48
【问题描述】:
我在使用 Threads 和 Termios 时遇到了一个非常奇怪的 print() 错误。我有一个重复的线程在打印一些东西时通过 Termios 捕获一个键。但它总是打印一个新行,它不是从行首开始,而是从最后一行结束的地方开始。
这是我的代码:
def func1():
while True:
try:
var = int(inputChar())
except ValueError:
var = 0
Thread(target=func1).start()
while True:
print("stuff")
time.sleep(2)
这是我的 inputChar() 函数:
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
这是预期的输出:
stuff
stuff
stuff
stuff
stuff
这是输出:
stuff
stuff
stuff
stuff
stuff
【问题讨论】:
-
看起来你的打印以换行结束,而不是换行。
-
看起来像一个竞争条件;输出可能取决于在另一个线程中对
tty.setraw和terms.tcsetattr的调用之间是否调用了print。
标签: python python-3.x multithreading printing termios