Python 回车和线程

1 投票
2 回答
840 浏览
提问于 2025-04-18 14:25

我有一个脚本,它会不断地从传感器读取数据,然后打印一个回车符和传感器的值。这个过程会一直进行,直到我按下回车键结束输入。

但是,当我运行这个脚本时,我看到的不是一个递增的数字,而是一片空白。当我按下回车键时,才会打印出一个数字,然后程序就结束了。如果把回车符\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()

2 个回答

1

我在尝试一些方法时,试着用 sys.stdout.flush() 来清空输出,结果成功了。谢谢大家的帮助。

2

这里的区别在于,写入换行符会立即清空通道,而写入回车符(或者其他大多数字符)则不会。你可以通过在写入后加上一个明确的清空命令来实现相同的效果:

sys.stdout.flush()

至于为什么没有清空命令会导致raw_input()一直不返回,我认为这是因为stdout上有缓冲区;不过,我还没有找到更多的细节。

撰写回答