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

时间:2017-01-16 10:50:00

标签: python

我有疑问,因为我不理解它背后的原理。

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

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

有人可以解释这是如何/为何有效吗?

THX。

1 个答案:

答案 0 :(得分:0)

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

BTW,假设rtl_fm输出原始字节,在Python 3中,您可以通过读取stdinsys.stdin.buffer读取这些字节,而不是弄乱文件描述符和{{ 1}}来电。 (在Python 2中,您只能从os读取字节;至少,您可以在Linux上,以及其他不在文本流上进行换行的类Unix操作系统。)