在脚本中与 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
这是我脚本中的代码:
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