可以在adb logcat中清除指定的消息或行而不是全部清除?

问题描述:

我正在使用Monkeyrunner(自动化)测试Android设备上的应用程序(Samsung S2),并且由于它不允许我在屏幕上看到图像模式,所以我必须依靠adb logcat(使用Windows)查找特定的消息以便知道下一页何时加载了我的自动化脚本。可以在adb logcat中清除指定的消息或行而不是全部清除?

而为了在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") 
+0

为什么你确实认为你需要*清除日志? –

+0

由于自动化脚本中有很多循环,我必须多次重复使用相同的logcat消息,并且如果以前使用的消息在我再次开始查找时未被清除,我的脚本将错误地找到第一次出现logcat消息,并过早地转向下一个动作。 – JordanViaComputer

+0

因此请更改您的脚本以找到正确的消息实例。你不需要清除日志来做到这一点 –

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

+0

你能提供一个你正在谈论的例子吗? – JordanViaComputer

+0

我在一行上做了这个“adb shell echo $ EPOCHREALTIME”,然后在我做了这个“adb logcat -T $ EPOCHREALTIME”之后,但是我收到以下错误消息:“$ EPOCHREALTIME”not in“%m-%d %H:%M:%S.%q“时间格式。这个命令不仅没有设置特定的日期时间,而且它的格式也是错误的。你可以再扩展一下吗? – JordanViaComputer

+0

错误消息非常明确。您的设备非常陈旧,并且不支持时代格式的logcat时间戳。所以使用它支持的格式。 –