了解阅读实时硬件流(python)
问题描述:
我有问题,因为我不明白它背后的原理。了解阅读实时硬件流(python)
我写了一个python脚本,用于从USB DVB-T Dongle读取实时数据,以便从无线温度传感器接收数据。我正在使用一个名为rtl_fm的程序。这将从加密狗读取数据并将其导入到我的脚本中。我通过搜索不太复杂的示例来编写脚本。
在此脚本中,我使用sys.stdin.fileno()从输入流不断读取512个字节。现在,我不知道是什么,为什么这个工作?如果加密狗即输入流将以更高的速率传输数据,然后我的脚本正在读取的速率,我会丢失数据,或者一些缓冲区最终会溢出。如果速度较慢,我的脚本会停止,因为没有更多的数据存在。
有人可以解释/为什么这是工作?
Thx。
答
操作系统的管道处理正在为您做缓冲。如果你读得太快,你的阅读将会阻止。如果rtl_fm
写得太快,写入将会被阻止。是否丢失数据取决于rtl_fm
的工作方式。
BTW,假设rtl_fm
输出原始字节,在Python 3,你可以通过阅读sys.stdin.buffer
,而不是与文件描述符和os
电话乱搞阅读stdin
这些字节。 (在Python 2中,您只能从sys.stdin
读取字节;至少,您可以在Linux以及其他类似Unix的操作系统上对文本流执行新行转换)。
你如何使用'sys.stdin.fileno()'来读取数据?该函数只返回文件描述符,在这种情况下为'0'。你应该使用'sys.stdin.read(512)'。 –
我管它到python脚本:rtl_fm参数| python script.py - – Pythoneer