使用Python实时打印l2ping输出

时间:2017-05-16 14:36:48

标签: python subprocess popen bluez

我试图将l2ping与Python(2.7)集成。 l2ping是一个来自blueZ包的工具,在linux上运行,可以对蓝牙设备执行echo请求。

我想实时显示(或存储在变量中)echo请求的输出。

我在这个社区中已经阅读了很多讨论,但是(在我的情况下)所有解决方案仅在ping过程结束时显示结果。

这是我的代码:

#!/usr/bin/python
import subprocess

mac_addr=  'XX:XX:XX:XX:XX:XX' //my real bluetooth mac address
process = subprocess.Popen(['unbuffer', 'l2ping', '-c', '3', mac_addr], bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

while True:
    print "debug"
    line = process.stdout.readline()
    if not line:
        break
    else:
        print line

正如我之前所说,我的代码显示了输出,但在过程结束时一次性显示。 程序一直持续到#34; debug"然后它停止,等待l2ping结束并打印出所有输出。

我也尝试使用bufsize=0stdout.flush(),但实时不显示任何输出。此外,communicate()check_output()也不适合我。

我认为l2ping命令与其他命令完全不同,实际上它不会立即写入stdout,这可能会导致特定问题。

我做错了什么?如何实时读取l2ping的输出?

编辑:我找到了一个适合我的解决方案。当我拨打unbuffer时,我使用命令l2ping。我编辑了代码。

0 个答案:

没有答案