我们小组的大作业要从多个维度分析同学们的代码情况,描绘出编程者的用户画像。
起初,我们小组商量着对同学们的py代码分析出循环深度。不得不说,对文件做词法分析和“循环深度”这样的事情,看着就很烦。
于是我在网上看到了下面这个文章。
如何科学评估代码复杂度?
确实,mi指数或者圈复杂度要比我们想的循环深度要好(再说直接调用就好)。
官方文档或者中文的链接里面,没提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”}}