Python 如何准确地测量流经命名管道的比特率?

Python 如何准确地测量流经命名管道的比特率?,python,subprocess,pipe,named-pipes,fifo,Python,Subprocess,Pipe,Named Pipes,Fifo,如果我有proc1 | proc2是否有一种方法可以准确地测量流经管道的比特率,而不会像测量设备不在那里一样改变行为?你想要点什么好吗?我想要proc1 | tee proc2>流量测量(东西还是proc1 | tee流量测量(东西)>proc2?如果我正确理解管道,unix管道在默认情况下会占用4096字节,如果接收器读取数据的速度不如读取数据的速度快,它们可能会阻塞,因此我担心,如果我没有正确实现,测量设备本身可能会导致管道中的“层流”流变得“湍流” 实际用例是用python粘合起来的,带有

如果我有
proc1 | proc2
是否有一种方法可以准确地测量流经管道的比特率,而不会像测量设备不在那里一样改变行为?你想要点什么好吗?我想要
proc1 | tee proc2>流量测量(东西
还是
proc1 | tee流量测量(东西)>proc2
?如果我正确理解管道,unix管道在默认情况下会占用4096字节,如果接收器读取数据的速度不如读取数据的速度快,它们可能会阻塞,因此我担心,如果我没有正确实现,测量设备本身可能会导致管道中的“层流”流变得“湍流”

实际用例是用python粘合起来的,带有来自os的命名管道。。下面是一个大大简化的示例

import os, subprocess
os.mkfifo('pipe')
subprocess.Popen(['convert', '-i', 'pipe', '-o', 'somewhere_else'])
subprocess.Popen(['capture', '-o', 'pipe'])

为了简单起见,让我们假设转换器不修改比特率,然后我希望能够验证
capture | convert |/dev/null
是否以与
capture |/dev/null

相同的速率泵送位,正如Corey Goldberg所说,您应该使用
pv
。这是一个非常好的工具,可用于大多数*nix系统。你可以这样做:

capture | pv > /dev/null
capture | convert | pv > /dev/null
pv
将告诉您每个案例的吞吐量


或者,如果捕获的输出是确定性的,只需使用计时器。

pv(管道查看器)是否有帮助?是的,这就是诀窍。谢谢如何强制
pv
以b/s表示吞吐量?我正在尝试使用
netcat
测量不同位置的WLAN吞吐量。目前我只是使用Gnome系统监视器来测量WiFi接口的吞吐量,但将来我想使用命令行工具,如
pv
@JamesHaigh:在我的系统上(带有MacPorts的Mac OS,使用
端口安装pv
),pv打印B/s(字节/秒)。如果你说你需要的是位而不是字节,那么就乘以8@约翰·温克:我希望它是b/s实时的。是否有一些命令行魔法可以将stderr切碎,将值乘以8,然后重建输出,使其以与
pv
的正常输出相同的方式工作?我喜欢
pv
就地刷新的方式,但现在我将使用我知道如何用b/s表示值的工具来监控网络接口。@JamesHaigh:我不知道,我认为你最好还是按照你说的做,使用网络监控工具来监控网络
pv
对我来说更像是一个快速而肮脏的工具,可以增强我的交互式CLI工作。