了解阅读实时硬件流(python)

问题描述:

我有问题,因为我不明白它背后的原理。了解阅读实时硬件流(python)

我写了一个python脚本,用于从USB DVB-T Dongle读取实时数据,以便从无线温度传感器接收数据。我正在使用一个名为rtl_fm的程序。这将从加密狗读取数据并将其导入到我的脚本中。我通过搜索不太复杂的示例来编写脚本。

在此脚本中,我使用sys.stdin.fileno()从输入流不断读取512个字节。现在,我不知道是什么,为什么这个工作?如果加密狗即输入流将以更高的速率传输数据,然后我的脚本正在读取的速率,我会丢失数据,或者一些缓冲区最终会溢出。如果速度较慢,我的脚本会停止,因为没有更多的数据存在。

有人可以解释/为什么这是工作?

Thx。

+1

你如何使用'sys.stdin.fileno()'来读取数据?该函数只返回文件描述符,在这种情况下为'0'。你应该使用'sys.stdin.read(512)'。 –

+0

我管它到python脚本:rtl_fm参数| python script.py - – Pythoneer

操作系统的管道处理正在为您做缓冲。如果你读得太快,你的阅读将会阻止。如果rtl_fm写得太快,写入将会被阻止。是否丢失数据取决于rtl_fm的工作方式。

BTW,假设rtl_fm输出原始字节,在Python 3,你可以通过阅读sys.stdin.buffer,而不是与文件描述符和os电话乱搞阅读stdin这些字节。 (在Python 2中,您只能从sys.stdin读取字节;至少,您可以在Linux以及其他类似Unix的操作系统上对文本流执行新行转换)。