【问题标题】:How to get a brief summary or exactly the number of errors and warnings using pylint in python如何在 python 中使用 pylint 获得简短的摘要或准确的错误和警告数量
【发布时间】:2014-11-07 12:19:33
【问题描述】:

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

pylint -rn

这使我们可以仅使用消息获取 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()

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

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

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

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

【问题讨论】:

  • Pylint 是一个 python 脚本,我很确定你可以使用它的内部功能而不是抓取和解析主脚本的输出。看看源代码,你会发现一个 API 可以为你提供你想要的。
  • @ikaros- 你能告诉我任何适合我需要的 API 吗?
  • 不,我不能...我对 pylint 了解不多。 plg 的答案比 Popen 好,但仍然不是我建议的方法......应该可以调用执行文件分析的函数并获得带有结果的数据结构。也许你可以在邮件列表中询问。

标签: python python-2.7 pylint


【解决方案1】:

首先,不要使用Popen,引用Pylint's docs

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

from pylint import epylint as lint
(pylint_stdout, pylint_stderr) = lint.py_run('module_name.py', True)

第二,看输出格式,man pylint 说:

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

MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

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

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

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

【讨论】:

  • 这很有趣,但是您仍然必须解析 stdout 和 stderr ... 可能可以调用返回原始 python 数据结构和结果的 API,然后再将它们转换为输出.
  • 我对 Pylint 也不太了解,但是在阅读了一些文档后,我认为它不是为那样使用而设计的,特别是如果他们提供自己的 Popen 包装器...
【解决方案2】:

例如。要计算错误,您可以使用这个 sn-p:

from pylint.lint import Run

paths_to_check = ['./']
pylint_params = ["--rcfile=.pylintrc", "--exit-zero", "--errors-only"]
results = Run(pylint_params + paths_to_check, do_exit=False)
errors = results.linter.stats['error']

message = ('Number of errors: {}'.format(errors))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多