如何在python中使用pylint获取简要摘要或确切的错误和警告数量

Zum*_*baa 6 python pylint python-2.7

如何使用 python 代码获取 pylint 错误消息的简要摘要或获取 pylint 错误、警告、重构的数量?

pylint -rn
Run Code Online (Sandbox Code Playgroud)

这允许我们仅通过消息获取 pylint 输出并排除报告。我到目前为止所尝试的是:

lint_arg = "pylint -rn %s"%file_name
pr = subprocess.Popen(
                arg, cwd=os.path.dirname(lint_path),
                shell=True, stdout=subprocess.PIPE,
                stderr=subprocess.PIPE)
            (out, error) = pr.communicate()
            pylint_result =  out + "\n" + error
file=open("pylint_output",w)
file.write(pylint_result)
file.close()
Run Code Online (Sandbox Code Playgroud)

我只想获取发生错误、警告的行数,并将此信息移动到字符串中。我的想法如下:

第 1 步:使用 subprocess.Popen() 在 python 脚本中运行 pylint
第 2 步:将输出存储在文件或变量中。
第 3 步:解析文件并生成如下预期输出:

预期输出:以下文件 <文件名> 有:
5 个警告行号:11, 34 ,56(发生警告的行)
行号 2 个错误(发生错误的行)。

我如何在 pylint 命令的帮助下或使用 python 脚本来做到这一点?任何帮助表示赞赏。提前谢谢。

Thi*_*aos 4

首先,不要使用Popen, 来引用Pylint 的文档

要在 module_name.py 模块上静默运行 Pylint,并获取其标准输出和错误:

from pylint import epylint as lint
(pylint_stdout, pylint_stderr) = lint.py_run('module_name.py', True)
Run Code Online (Sandbox Code Playgroud)

其次,看输出格式,man pylint说:

使用默认的文本输出,消息格式为:

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE
Run Code Online (Sandbox Code Playgroud)

假设line是一行 Pylint 输出,这应该收集您需要的所有内容:

pylint_res = {'C': [], 'R': [], 'W': [], 'E': [], 'F': []}
msg_type, lineno = line.split(':', 2)[:2]
pylint_res[msg_type].append(lineno)
Run Code Online (Sandbox Code Playgroud)

您需要做的就是迭代 Pylint 的输出,将上面的内容添加到pylint_res,然后打印结果。