Python 回车和线程
我有一个脚本,它会不断地从传感器读取数据,然后打印一个回车符和传感器的值。这个过程会一直进行,直到我按下回车键结束输入。
但是,当我运行这个脚本时,我看到的不是一个递增的数字,而是一片空白。当我按下回车键时,才会打印出一个数字,然后程序就结束了。如果把回车符\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上有缓冲区;不过,我还没有找到更多的细节。