使用python和radon批量获取代码复杂度

使用python和radon批量获取代码复杂度

任务概述

我们小组的大作业要从多个维度分析同学们的代码情况,描绘出编程者的用户画像。

为啥用radon

起初,我们小组商量着对同学们的py代码分析出循环深度。不得不说,对文件做词法分析和“循环深度”这样的事情,看着就很烦。

于是我在网上看到了下面这个文章。
如何科学评估代码复杂度?

确实,mi指数或者圈复杂度要比我们想的循环深度要好(再说直接调用就好)。

如何使用radon

官方文档或者中文的链接里面,没提radon是在控制台或者powershell里面调用的。(win10用户,不了解mac或者Linux)

我以为这想普通Python包在Python代码调用,结果废了好多时间。。。

我得处理200多号人的代码文件,控制台一个一个输地址显然不行,于是看了批处理。不知为何,我的控制台似乎运行不了radon。于是我都是用powershell。

下面是powershell文件,叫radon_mi.ps1,就是一个函数,参数是$p1 $p2,方便我Python换文件地址调用。

cd C:\ProgramData\Anaconda3\Lib\site-packages
function get_mi{
Param($p1,$p2)
radon mi $p1 -j -O $p2
}
get_mi -p1 $args[0] -p2 $args[1]

下面是我Python函数,参数是源文件地址和生成的带有mi内容文件的目标地址,返回值就是带有mi内容文件。上面的ps1文件是radon mi xxx -j -O xxx嘛

def get_mi_json_from_powershell(src_py_f, ans_json_f):
    try:
        args = [r"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", "-ExecutionPolicy", "Unrestricted",
                r"E:\新桌面\radon_mi.ps1",
                src_py_f, ans_json_f]
        p = subprocess.Popen(args, stdout=subprocess.PIPE)
        dt = p.stdout.read()
        return dt
    except Exception:
        print("exception")
        return False

下面是返回的文件的示例。

{“E:\\u65b0\u684c\u9762\py_files\user2843\case2533.py”: {“mi”: 100.0, “rank”: “A”}}

注意点

  1. 编码问题,radon只支持处理使用gbk编码(在中文win10上),所以,要处理的文件要提前转码。
  2. 文件路径结构搞好,最好英文,我中文乱码了。。。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值