如何在运行Python代码时从Pylint获取报告和分数?

3

我无法在直接从Python代码运行pylint时获得任何返回值。从命令行运行可以生成一个漂亮的报告,底部有一个汇总分数。

我尝试将“Run”的返回值放入变量中,并获取其“reports”字段 - 但似乎是一些默认模板。

这就是我拥有的:

from io import StringIO
from pylint.reporters import text
from pylint.lint import Run


def main():
    print("I will verify you build!")
    pylint_opts = ['--rcfile=pylintrc.txt', '--reports=n', 'utilities']
    pylint_output = StringIO()
    reporter = text.TextReporter(pylint_output)
    Run(pylint_opts, reporter=reporter, do_exit=False)
    print(pylint_output.read())


if __name__ == '__main__':
    main()

我本来期望在这里看到一些报告,但我只得到了以下信息:"我会验证你的构建!"。
"进程以退出代码0结束。"

你输入的命令是什么? - user7548672
2个回答

1
我调查了pylint问题。最终我们保留了当前的行为,因为只需稍加调整即可让你的代码正常工作:
def main():
    print("I will verify you build!")
    pylint_opts = ['--rcfile=pylintrc.txt', '--reports=n', 'utilities']
    pylint_output = StringIO()
    reporter = text.TextReporter(pylint_output)
    Run(pylint_opts, reporter=reporter, do_exit=False)
    print(pylint_output.getvalue())

StringIO 是一个不隐藏流位置的流。Pylint 正确地写入到 pylint_output,但将游标留在流的末尾。 pylint_output.read() 仅从光标位置开始读取。

您可以调用 pylint_output.seek(0) 来重置流位置,然后再调用 pylint_output.read()。另外,如上方代码块所示,StringIO 提供了一个名为 getvalue 的方法,该方法将返回缓冲区的全部内容,而不考虑光标位置。

Pylint 文档将会更新此示例,因此感谢您提出它。


1

代码没问题,但这是pylint中的一个bug,将通过此问题得到解决。


非常感谢!我相信你的答案将会帮助未来的某个人 :) - Alexy Grabov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接