Python 3.8.0奇怪的打印错误

Python 3.8.0奇怪的打印错误,python,python-3.x,multithreading,printing,termios,Python,Python 3.x,Multithreading,Printing,Termios,在使用线程和Termios时,我有一个非常奇怪的print()错误。我有一个重复线程在打印一些东西时通过Termios捕捉到一个键。但它总是打印新行,它不是从行的开头开始,而是从最后一行结束的地方开始 这是我的代码: def func1(): while True: try: var = int(inputChar()) except ValueError: var = 0 Thread(target=fu

在使用线程和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

我不知道为什么会发生这种情况,但您可以通过将print命令替换为

print("stuff\r")


末尾的\r称为盒式磁带返回。当sys.stdout.write()不是一个可行的选项时,它很有用

它看起来像是您的打印以换行结束,而不是换行。看起来像是竞争条件;输出可能取决于在另一个线程中对
tty.setraw
terms.tcsetattr
的调用之间是否调用
print
sys.stdout.write("stuff\n\r")