在脚本中与 adb logcat 一起使用时 sed 不会退出

sed does not quit when used along with adb logcat in a script

这是我脚本中的代码:

cmd = "adb logcat | sed  -n '/pattern1/p;/pattern2/q'"
getLogs,error = subprocess.Popen(['/bin/bash', '-c', cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

adb logcat | sed -n '/pattern1/p;/pattern2/q' 在终端中工作正常,但在脚本中使用相同代码时 sed 不会退出。

我不想在这里使用“adb logcat -d |”,因为我希望脚本在我正在设备中执行某些操作时 运行,而不是在完成用户操作之后。

sed 包装成 bash 然后包装成 python 是恶业。

import subprocess

def logcat_iterator(options, display_pattern, quit_pattern):
    popen = subprocess.Popen(['adb', 'shell', 'logcat {}'.format(options)], stdout=subprocess.PIPE)
    iterator = iter(popen.stdout.readline, b'')
    for line in iterator:
        if len(line) > 0:
            if line.find(quit_pattern) > 0:
                break
            elif line.find(display_pattern) > 0:
                yield line

这样使用:

for l in logcat_iterator('-b main -v time', 'Displayed', 'Displayed com.android.settings/.Settings'):
    print l