Python回车和线程

标签 python multithreading control-characters

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

相关文章:

c++ - 管道实现问题

Java 线程和同步块(synchronized block)

c++ - 将控制字符传递给 char 数组

mysql - 在MySQL中查找只有换行符的列值

python - 在运行时用函数重载方法

python - python 单元测试的基本测试用例类

python - 如何在 Linux 上动态插入来自 Python 的 C 函数(没有 LD_PRELOAD)?

python - 是否有一个模块可以记录内存中的错误?

c++ - 使用来自不同线程的 int64 的不同字节是否安全?

javascript - ASCII 控制字符 html 输入文本