所以我有一个脚本,它会不断地从传感器读取,打印回车,然后是传感器值。它会一直这样做到 raw_input()
完成阻塞(按下输入)。
但是,当我运行它时,我看到的不是越来越多的数字,而是空白。当我按下回车键时,会打印一个数字,然后程序退出。如果 \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()
最佳答案
不同之处在于写出换行符会刷新 channel ,而写出回车符(或大多数其他字符)则不会。您可以通过在 write() 之后添加显式刷新来获得相同的行为:
sys.stdout.flush()
至于为什么没有刷新会导致 raw_input() 永远不会返回,我相信这是由于 stdout 上存在缓冲;但是,我无法找到更多详细信息。
关于Python回车和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24911224/