如何使用PyLint仅输出分类消息表并填充历史版本与差异列
实现方案
步骤1:单独提取PyLint消息分类统计表
通过参数控制+文本过滤,即可只拿到你需要的统计表,排除其他冗余输出:
# 核心命令,仅输出消息分类统计表 pylint --load-plugins pylint_django --reports=y <你的代码路径> 2>/dev/null | awk '/Messages by category/,/Global evaluation/' | head -n -1
参数说明:
--reports=y强制开启统计报告输出- 用awk截取
Messages by category到Global evaluation之间的内容,刚好是完整的分类统计表 - 末尾
head -n -1是去掉结尾的Global evaluation行,只保留表格内容
步骤2:实现双版本对比统计
你可以写一个简易shell脚本实现指定两个Git哈希的对比功能,逻辑如下:
- 用
git worktree把两个版本的代码签出到独立临时目录,不会污染当前工作区 - 分别对两个目录跑PyLint,提取分类统计数据存为临时结果
- 合并两组数据,计算差异后输出带对比列的表格
下面是可直接使用的脚本示例,保存为pylint-table.sh,添加执行权限即可运行:
#!/bin/bash # 用法: ./pylint-table.sh <旧版本哈希/分支名> <新版本哈希/分支名> # 示例: ./pylint-table.sh master HEAD OLD_REF=$1 NEW_REF=${2:-HEAD} # 替换为你代码库中需要检测的相对路径 SRC_PATH="src/" # 创建临时目录存两个版本的代码 OLD_DIR=$(mktemp -d) NEW_DIR=$(mktemp -d) # 用git worktree签出代码,不影响当前工作区的修改 git worktree add --detach "$OLD_DIR" "$OLD_REF" git worktree add --detach "$NEW_DIR" "$NEW_REF" # 分别跑pylint提取统计 echo "正在检测旧版本: $OLD_REF" OLD_STATS=$(pylint --load-plugins pylint_django --reports=y "$OLD_DIR/$SRC_PATH" 2>/dev/null | awk '/Messages by category/,/Global evaluation/' | head -n -1 | tail -n +3) echo "正在检测新版本: $NEW_REF" NEW_STATS=$(pylint --load-plugins pylint_django --reports=y "$NEW_DIR/$SRC_PATH" 2>/dev/null | awk '/Messages by category/,/Global evaluation/' | head -n -1 | tail -n +3) # 清理临时worktree git worktree remove "$OLD_DIR" git worktree remove "$NEW_DIR" # 输出带对比的表格 echo -e "| 消息类型 | 旧版本数量 | 新版本数量 | 差异 |" echo -e "| --- | --- | --- | --- |" # 合并两组数据计算差异 paste <(echo "$OLD_STATS") <(echo "$NEW_STATS") | while read -r old_line new_line; do type=$(echo "$old_line" | awk '{print $1}') old_cnt=$(echo "$old_line" | awk '{print $2}') new_cnt=$(echo "$new_line" | awk '{print $2}') diff=$((new_cnt - old_cnt)) # 差异为正自动添加+号,更直观 [ $diff -gt 0 ] && diff="+$diff" echo -e "| $type | $old_cnt | $new_cnt | $diff |" done
自定义调整说明
- 如果需要统计更细粒度的单条错误码数量,把awk匹配的关键词换成
Messages即可,对应pylint输出的详细错误码统计表 - 可以修改输出格式为csv,对接其他可视化工具生成对比报告
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

