可以在adb logcat中清除指定的消息或行,而不是清除所有消息或行吗?

时间:2017-07-31 13:12:46

标签: android adb logcat monkeyrunner

我正在使用Monkeyrunner(自动化)在Android设备上测试应用程序(Samsung S2),由于它不允许我在屏幕上看到图像模式,我必须依赖adb logcat(使用Windows)查找特定消息,以便知道下一页何时加载了我的自动化脚本。

为了在logcat中查找特定(唯一)消息,对于我的monkeyrunner脚本,我必须清除所有adb日志,然后执行搜索。

有没有办法在logcat日志中只清除与特定标记,消息,文本或其他(!)匹配的行?而不是清除一切?

命令行adb功能是否允许您清除特定行,或者它是全有或全无的事情?

清除所有logcat longs的工作原理,但是只清除某些消息会很好,这样如果/当有应用程序崩溃,或者某些事件我需要详细信息进行故障排除时,我可以看到所有日志都领先崩溃(或重大事件)。因为如果一切都被清除了,我就无法看到logcat日志来解决问题。

:::更多信息:::

这是我目前用来清除所有日志的功能。

def clearAdb():
    p = subprocess.Popen("adb logcat -v time", shell=True, cwd="C:\Users\<USERNAME>AppData\Local\Android\sdk\platform-tools", stdout=subprocess.PIPE)
    subprocess.Popen("adb logcat -c", shell=True, cwd="C:\Users\<USERNAME>AppData\Local\Android\sdk\platform-tools", stdout=subprocess.PIPE)
    print("::: ADB cleared :::")

..这里是我如何寻找logcat日志的一个例子。此adb函数会无限期地等待特定的adb消息,并在看到时进行处理。

def adb(message):
    p = subprocess.Popen("adb logcat -v time", shell=True, cwd="C:\Users\<USERNAME>\AppData\Local\Android\sdk\platform-tools", stdout=subprocess.PIPE)
    for line in p.stdout:
        if message in line:
            print("Got 'em")
            break
        else:
            continue

...这就是我目前一起使用这些功能的方式......

clearAdb()
adb("identifyGamePackage. com.tfg.nameofapplication")

1 个答案:

答案 0 :(得分:1)

要将logcat输出限制为在特定时刻之后发生的消息,您不必清除日志。而是使用logcat -T <timestamp>过滤器。支持的时间戳格式取决于Android版本 - 请参阅-T输出中的logcat -h段。