1

如果我有proc1 | proc2办法准确测量流过管道的比特率,而不会改变行为,就好像测量设备不存在一样?像 tee 这样的东西可以吗?我想要proc1 | tee proc2 > flow_measurement_thing还是proc1 | tee flow_measurement_thing > 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

4

1 回答 1

2

正如 Corey Goldberg 所说,您应该使用pv. 这是一个非常好的工具,可在大多数 *nix 系统上使用。你可以做这些事情:

capture | pv > /dev/null
capture | convert | pv > /dev/null

pv将告诉您每种情况的吞吐量。

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

于 2011-06-17T01:47:22.020 回答