Store Python PEP8 module output

时间秒杀一切 提交于 2019-12-06 15:45:47

问题


I am using PEP8 module of python inside my code.

import pep8

pep8_checker = pep8.StyleGuide(format='pylint')

pep8_checker.check_files(paths=['./test.py'])
r = pep8_checker.check_files(paths=['./test.py'])

This is the output:

./test.py:6: [E265] block comment should start with '# '
./test.py:23: [E265] block comment should start with '# '
./test.py:24: [E302] expected 2 blank lines, found 1
./test.py:30: [W293] blank line contains whitespace
./test.py:35: [E501] line too long (116 > 79 characters)
./test.py:41: [E302] expected 2 blank lines, found 1
./test.py:53: [E501] line too long (111 > 79 characters)
./test.py:54: [E501] line too long (129 > 79 characters)

But this result is printed on terminal and the final value that is assigned to 'r' is 8 (i.e. total numbers of errors).

I want to store these errors in a variable. How can I do this?

EDIT: here is the test.py file: http://paste.fedoraproject.org/347406/59337502/raw/


回答1:


There are at least two ways to do this. The simplest is to redirect sys.stdout to a text file, then read the file at your leisure:

import pep8
import sys

saved_stdout = sys.stdout
sys.stdout = open('pep8.out', 'w')

pep8_checker = pep8.StyleGuide(format='pylint')
pep8_checker.check_files(paths=['./test.py'])
r = pep8_checker.check_files(paths=['./test.py'])

sys.stdout.close()
sys.stdout = saved_stdout

# Now you can read "pep.out" into a variable

Alternatively you can write to a variable using StringIO:

import pep8
import sys

# The module name changed between python 2 and 3
if sys.version_info.major == 2:
    from StringIO import StringIO
else:
    from io import StringIO

saved_stdout = sys.stdout
sys.stdout  = StringIO()

pep8_checker = pep8.StyleGuide(format='pylint')

pep8_checker.check_files(paths=['./test.py'])
r = pep8_checker.check_files(paths=['./test.py'])

testout = sys.stdout.getvalue()
sys.stdout.close()
sys.stdout = saved_stdout

# testout contains the output.  You might wish to testout.spilt("\n")


来源:https://stackoverflow.com/questions/36306814/store-python-pep8-module-output

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!