{我有许多问题的答案,包括通过现场阅读 去读标准输出。在
然而,当他的解决方案在这种情况下起作用时:
with Popen(['ping'] + ['169.254.79.191'] + ['-c'] + ['5'], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
它与我实际想要使用的应用程序的工作方式不一样:
^{pr2}$对于ping场景,每一行都打印出来,就像我手动运行一样。使用iperf,它在两行输出后停止,并在应用程序完成时刷新所有内容。 如果我在脚本中一个接一个地执行它们,则会得到以下输出:
pi@raspberrypi2:~/project $ python3.4 stdout_RT_test.py
PING 169.254.79.191 (169.254.79.191) 56(84) bytes of data.
64 bytes from 169.254.79.191: icmp_seq=1 ttl=64 time=0.854 ms
64 bytes from 169.254.79.191: icmp_seq=2 ttl=64 time=0.867 ms
64 bytes from 169.254.79.191: icmp_seq=3 ttl=64 time=0.877 ms
64 bytes from 169.254.79.191: icmp_seq=4 ttl=64 time=0.842 ms
64 bytes from 169.254.79.191: icmp_seq=5 ttl=64 time=0.834 ms
--- 169.254.79.191 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.834/0.854/0.877/0.040 ms
iperf 3.0.7
Linux raspberrypi2 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux
在IPERF完成后,此行之后的所有内容都将显示
Time: Wed, 29 Mar 2017 14:46:48 GMT
Connecting to host 169.254.79.191, port 5202
Reverse mode, remote host 169.254.79.191 is sending
Cookie: raspberrypi2.1490798808.947399.0490a
[ 4] local 169.254.181.167 port 41415 connected to 169.254.79.191 port 5202
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 10 second test
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-1.00 sec 136 KBytes 1.11 Mbits/sec 1.907 ms 0/17 (0%)
[ 4] 1.00-2.00 sec 128 KBytes 1.05 Mbits/sec 0.966 ms 0/16 (0%)
[ 4] 2.00-3.00 sec 128 KBytes 1.05 Mbits/sec 0.634 ms 0/16 (0%)
[ 4] 3.00-4.00 sec 128 KBytes 1.05 Mbits/sec 0.522 ms 0/16 (0%)
[ 4] 4.00-5.00 sec 128 KBytes 1.05 Mbits/sec 0.466 ms 0/16 (0%)
[ 4] 5.00-6.00 sec 128 KBytes 1.05 Mbits/sec 0.456 ms 0/16 (0%)
[ 4] 6.00-7.00 sec 128 KBytes 1.05 Mbits/sec 0.452 ms 0/16 (0%)
[ 4] 7.00-8.00 sec 128 KBytes 1.05 Mbits/sec 0.447 ms 0/16 (0%)
[ 4] 8.00-9.00 sec 128 KBytes 1.05 Mbits/sec 0.451 ms 0/16 (0%)
[ 4] 9.00-10.00 sec 128 KBytes 1.05 Mbits/sec 0.460 ms 0/16 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-10.00 sec 1.26 MBytes 1.06 Mbits/sec 0.460 ms 0/161 (0%)
[ 4] Sent 161 datagrams
CPU Utilization: local/receiver 0.5% (0.0%u/0.5%s), remote/sender 0.0% (0.0%u/0.0%s)
iperf Done.
在Interval列中可以看到,如果我手动运行相同的命令,大约每秒打印一行。我是python新手,所以任何错误都有可能。我尝试过其他几种缓存stdout的方法,但是它们也像这样冻结输出。这能解决吗?在
BR公司 安德烈亚斯
编辑:我曾考虑过iperf不是刷新的问题,但由于它显然是在每秒写一行新行,所以必须有一种方法在刷新之前捕捉到它。当运行更长的测试时,我注意到stdout缓冲区最终会达到最大值,并将刷新许多行并继续,直到它再次满为止。在
尝试对iperf3使用
forceflush
命令行标志。这会导致iperf3在每行输出之后刷新其输出。在相关问题 更多 >
编程相关推荐