Python回车和线程

Python回车和线程,python,multithreading,control-characters,Python,Multithreading,Control Characters,所以我有一个脚本,它会不断地从一个传感器读取数据,打印一个回车,然后是传感器值。它会一直执行此操作,直到raw\u input()完成阻塞(按enter键) 然而,当我运行它时,我看到的不是一个不断增加的数字,而是空白。当我按enter键时,会打印一个数字,然后程序退出。如果将\r替换为\n,程序将按其应该的方式运行,打印出“传感器”值(i=i+1是传感器读数的占位符),但不是重复使用同一行,而是在新行上打印。 为什么它不能与\r一起使用? 以下是完整的代码: from threading im

所以我有一个脚本,它会不断地从一个传感器读取数据,打印一个回车,然后是传感器值。它会一直执行此操作,直到
raw\u input()
完成阻塞(按enter键)

然而,当我运行它时,我看到的不是一个不断增加的数字,而是空白。当我按enter键时,会打印一个数字,然后程序退出。如果将
\r
替换为
\n
,程序将按其应该的方式运行,打印出“传感器”值(
i=i+1
是传感器读数的占位符),但不是重复使用同一行,而是在新行上打印。 为什么它不能与
\r
一起使用? 以下是完整的代码:

from threading import Thread
from time import sleep
import sys

running = True

def loop():
        i = 0
        while running:
                sys.stdout.write("\r" + str(i))
                i = i+1
                sleep(0.1)


thread = Thread(target=loop)
thread.start()
raw_input()
running = False
thread.join()

区别在于写出换行符会刷新通道,而写出回车符(或大多数其他字符)则不会。通过在write()之后添加显式刷新,可以获得相同的行为:


至于为什么缺少刷新会导致原始输入()永远不会返回,我认为这是由于标准输出上存在缓冲;但是,我无法找到更多详细信息。

我尝试了一些方法,并尝试使用sys.stdout.flush()刷新输出,结果成功了。谢谢大家的帮助。

也许您想阅读以下内容:使用
\r
它可以连续打印行,使用
\n
它可以按原样打印新行。您希望看到什么输出?@PadraicCunningham在我的屏幕上使用
\r
时不会显示任何内容,直到我按enter键,然后我看到一行,我们的屏幕关闭。我应该在开头看到一行重写和增加,然后在按enter键时停止。使用
\r
我看到
1True
等。。我认为您也不需要全局关键字。@padraickenningham对不起,我在测试代码时就把它们留在了里面。现在它做什么了?我编辑了它?
sys.stdout.flush()