我有疑问,因为我不理解它背后的原理。
我写了一个python脚本,从USB DVB-T Dongle读取实时数据,以便从无线温度传感器接收数据。我正在使用一个名为rtl_fm的程序。这将从加密狗读取数据并将其传输到我的脚本中。我通过搜索不太复杂的例子来编写脚本。
在这个脚本中,我使用sys.stdin.fileno()从输入流中不断读取512个字节。现在,我没有做什么,为什么这有效?如果加密狗(也就是输入流)以比我的脚本正在读取的速率更高的速率传送数据,我将丢失数据,或者某些缓冲区最终会溢出。如果速率较慢,我的脚本将在一点停止,因为没有更多数据存在。
有人可以解释这是如何/为何有效吗?
THX。
答案 0 :(得分:0)
操作系统的管道处理正在为您缓冲。如果您读得太快,您的阅读将会阻止。如果rtl_fm
写得太快,写入将会阻塞。是否丢失数据取决于rtl_fm
的工作方式。
BTW,假设rtl_fm
输出原始字节,在Python 3中,您可以通过读取stdin
从sys.stdin.buffer
读取这些字节,而不是弄乱文件描述符和{{ 1}}来电。 (在Python 2中,您只能从os
读取字节;至少,您可以在Linux上,以及其他不在文本流上进行换行的类Unix操作系统。)