1

所以我有一个脚本,它会不断地从传感器读取,打印回车,然后是传感器值。它这样做直到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()
4

2 回答 2

2

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

sys.stdout.flush()

至于为什么没有刷新会导致 raw_input() 永远不会返回,我相信这是由于 stdout 上存在缓冲;但是,我无法找到更多详细信息。

于 2014-07-23T13:30:14.500 回答
1

我正在尝试一些事情并尝试用它来刷新输出sys.stdout.flush()并且它起作用了。谢谢大家的帮助。

于 2014-07-23T13:38:46.870 回答