美文网首页
python自动化处理logcat日志信息

python自动化处理logcat日志信息

作者: 码上就说 | 来源:发表于2019-01-17 22:10 被阅读80次

1.自动化导出logcat 关键字文本:

提取logcat中一个或者多个关键字。

2.自动化处理logcat时间点:

自动计算大数据量的logcat时间点信息。

3.自动化计算平均值:

自动计算大数据量的数据的平均值。

4.自动化计算sum值:

自动计算大数据量的数据的和。


1.自动化导出logcat 关键字文本

我们平时收集的logcat信息,有的是一个比较全面的信息数据,但是我们不是所有的信息都需要的,所以需要提取一些logcat信息中的某些关键字写入另外一个文件中,有这个需求,下面是执行这个功能的脚本:

# Author: jeffmony@163.com
# Date : 23/01/19

import sys
import string

KEYWORD1 = 'ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]'
KEYWORD2 = 'onFrameAvailable first frame arrived'
KEYWORDS = [KEYWORD1,KEYWORD2]

argv1 = sys.argv[1]
input_file = open(argv1, 'rU')
argv2 = sys.argv[2]
output_file = open(argv2, "w")
try:
    for line in input_file:
        for keyword in KEYWORDS:
            result = string.find(line, keyword) != -1
            if result:
                output_file.write(line)
finally:
    input_file.close()
    output_file.close()

输入的样例是:
python logcat_filter.py input_file.txt output_file.txt
第一个参数是输入文件,第二个文件是输出文件。我们将KEYWORDS列表中的关键字提取出来写入到output_file.txt文件中。

2.自动化处理logcat时间点

做测试camera 拍照性能的时候,需要一些logcat信息来记录一下拍照的各个时间点,抓住这些性能数据,需要分析的话挺费事的,一个一个计算,很浪费时间,现在根据我们logcat打点的特点,提取出一套自动化处理logcat时间点的脚本。
下面看看简单的例子,
例如 小米Note7拍照例子——前置人像拍照的logcat如下:

01-15 10:23:25.217 E/litianpeng( 7211): MiCamera2 takePicture
01-15 10:23:25.248 E/CHIUSECASE( 643): chxadvancedcamerausecase.cpp:2392 ExecuteCaptureRequest() litianpeng AdvancedCameraUsecase::ExecuteCaptureRequest i = 0
01-15 10:23:25.248 E/CHIUSECASE( 643): chxadvancedcamerausecase.cpp:3131 SelectFeatureToExecuteCaptureRequest() litianpeng SelectFeatureToExecuteCaptureRequest 0,0,0,0,0,1
01-15 10:23:25.248 E/CHIUSECASE( 643): chxfeaturemultiframe.cpp:719 ExecuteProcessRequest() litianpeng FeatureMultiframe::ExecuteProcessRequest i = 0
01-15 10:23:25.396 E/CHIUSECASE( 643): chxfeaturemultiframe.cpp:1193 ProcessResult() litianpeng ProcessResult ##
01-15 10:23:25.406 E/CHICLEARSHOT( 643): ClearShotNodeProcRequest():332 litianpeng camxchinodeclearshot visionclearshot start
01-15 10:23:26.039 E/CHICLEARSHOT( 643): ClearShotNodeProcRequest():334 litianpeng camxchinodeclearshot visionclearshot end
01-15 10:23:26.059 E/ ( 643): litianpeng SkinBeautifier process start
01-15 10:23:28.082 E/ ( 643): litianpeng SkinBeautifier process end
01-15 10:23:28.083 E/CHIUSECASE( 643): chxfeaturemultiframe.cpp:1229 ProcessResult() litianpeng ProcessResult ###
01-15 10:23:28.205 E/ ( 643): litianpeng MiBokehMiui process start
01-15 10:23:29.015 E/ ( 643): litianpeng MiBokehMiui process end
01-15 10:23:29.349 E/litianpeng( 7211): preparePhotoImageReader onImageAvailable

由于这儿不好粘贴文件,上面是一组数据,有13行,那么13行就作为一个INTERNAL,具体在python处理中会使用这个INTERNAL,下面还是直接看一下python脚本:

# Author: jeffmony@163.com
# Date : 15/01/19
 
import sys

INTERNAL = 13

def computeTimeDelta(time1, time2):
    arr1 = time1.split(':')
    arr2 = time2.split(':')
    result = 0;
    result = (int(arr2[0]) -int(arr1[0])) * 60*60*1000 + (int(arr2[1])-int(arr1[1]))*60*1000 + (int(float(arr2[2])*1000)-int(float(arr1[2])*1000))
    return result;

def printData(list):
    result = 0
    for i in range(len(list)-1):
        print '{:6d}'.format(int(list[i+1])),
        result += int(list[i])
    print '|  sum ={:6d}'.format(int(result)),

argv = sys.argv[1]
file_object = open(argv, 'rU')
list=[]
try:
    for line in file_object:
        tempStr = line.strip('\n')
        start = tempStr.find(' ')
        tempStr = tempStr[start+1:]
        end = tempStr.find(' ')
        tempStr = tempStr[:end]
        list.append(tempStr)
finally:
    file_object.close()

result = [0]*INTERNAL
for i in range(len(list)-1):
    tempIndex = (i+1)%INTERNAL
    if tempIndex != 0:
        result[tempIndex] = computeTimeDelta(list[i], list[i+1])
    else:
        printData(result)
        result = [0]*INTERNAL
        print
printData(result)

执行的语句是:python logcat_shell.py test2.txt

执行的结果如下:这样提取出来的结果更加方便一点,不用到处计算了。

    31      0      0    148     10    633     20   2023      1    122    810    334 |  sum =  3798
    72      0      1    147     25    612     19   2024      2     81    541    342 |  sum =  3524
    34      0      0    135      6    585     19   1878     16     99    500    330 |  sum =  3272
    39      1      0    152     13    339     20   1700      2     85    517    339 |  sum =  2868
    31      1      0    185      5    278     21   1738      2     93    475    345 |  sum =  2829
    27      1      0    157      5    648     21   2027      4     95    528    341 |  sum =  3513
    22      0      0    150      3    637     23   2168      1     93    552    336 |  sum =  3649
    34      0      0    159      8    630     18   2060      1    101    485    337 |  sum =  3496
    13      0      0    158      4    674     19   2012      2     91    532    334 |  sum =  3505
    31      0      0    152     13    593     22   2161      2     85    546    332 |  sum =  3605
    47      0      0    164     14    581     20   1987      1     98    544    327 |  sum =  3456

3.自动化计算平均值

原始数据如下,希望最终能计算出每一列的平均值:
47 164 581 1987 544 327 3650
72 147 612 2024 541 342 3738
34 135 585 1878 500 330 3462
39 152 339 1700 517 339 3086
31 185 278 1738 475 345 3052
27 157 648 2027 528 341 3728
22 150 637 2168 552 336 3865
34 159 630 2060 485 337 3705
13 158 674 2012 532 334 3723
31 152 593 2161 546 332 3815

执行的脚本如下:

# Author: jeffmony@163.com
# Date : 15/01/19
 
import sys
import re
import numpy
 
argv = sys.argv[1]
file_object = open(argv, 'rU')
arr_count = 0
list = []
try:
    for line in file_object:
        tempStr = line.strip('\n').strip(' ')
        ## important more ' ' replace with one ' '
        tempStr = re.sub(' +',' ', tempStr)
        arr_count = len(tempStr.split(' '))
        list.append(tempStr)
finally:
    file_object.close()
 
result = numpy.zeros(arr_count)
i = 0
for item in list:
    arr = item.split(' ')
    for index in range(len(arr)):
        result[index] += int(arr[index])
    i += 1
 
for index in range(len(result)):
    print float(result[index])/i

运行结果如下:

jeffmony@jeffmony-OptiPlex-7050:~/tools$ python compute_ave.py data.txt
35.0
155.9
557.7
1975.5
522.0
336.3
3582.4

4.自动化计算sum值

计算每一行的和,原始数据如下:
47 164 581 1987 544 327 3650
72 147 612 2024 541 342 3738
34 135 585 1878 500 330 3462
39 152 339 1700 517 339 3086
31 185 278 1738 475 345 3052
27 157 648 2027 528 341 3728
22 150 637 2168 552 336 3865
34 159 630 2060 485 337 3705
13 158 674 2012 532 334 3723
31 152 593 2161 546 332 3815

python脚本如下:

# Author: jeffmony@163.com
# Date : 16/01/19

import sys
import re
import numpy

argv = sys.argv[1]
file_object = open(argv, 'rU')
list = []
try:
    for line in file_object:
        tempStr = line.strip('\n').strip(' ')
        ## important more ' ' replace with one ' '
        tempStr = re.sub(' +',' ', tempStr)
        list.append(tempStr)
finally:
    file_object.close()

result = numpy.zeros(len(list))
i = 0
for item in list:
    arr = item.split(' ')
    for index in range(len(arr)):
        result[i] += int(arr[index])
    i += 1

for index in range(len(result)):
    print int(result[index])

运行结果如下:
$ python compute_sum.py data.txt
7300
7476
6924
6172
6104
7456
7730
7410
7446
7630

相关文章

  • python自动化处理logcat日志信息

    1.自动化导出logcat 关键字文本: 提取logcat中一个或者多个关键字。 2.自动化处理logcat时间点...

  • 常用adb shell命令

    adb命令(非shell命令) 15、查看logcat日志信息 按照tag输出 adb logcat -s -ta...

  • Android下log出现read: Unexpected EO

    因为logcat日志信息太多了了, 解决,在终端或命令窗口 adb logcat -G 2m

  • python logging模块使用

    参考资料 Python之日志处理(logging模块) Python之向日志输出中添加上下文信息 Python之配...

  • adb logcat使用

    adb logcat过滤某个日志 用代码实现: adb logcat实现 adb logcat过滤多个日志

  • Android Studio Logcat

    记录一下 logcat 的 regex 使用 logcat是android studio的控制台日志输出信息,一共...

  • adb+monkey

    运行monkey之前,需要记录好monkey和logcat的日志首先记录好logcat日志adb logcat -...

  • Android Adb Command

    查看PIDadb shell ps 查看日志全部日志adb logcat按照 PID 筛选日志adb logcat...

  • adb命令大全

    1、日志相关: adb logcat //显示全部日志 adb logcat > c:\test.log //...

  • ADB命令整合

    1、日志相关: adb logcat //显示全部日志 adb logcat > c:\test.log ...

网友评论

      本文标题:python自动化处理logcat日志信息

      本文链接:https://www.haomeiwen.com/subject/pmvwdqtx.html