#python #flake8
#python #flake8
Вопрос:
Я использую устаревший API flake8 для запуска проверки стиля в некоторых файлах, код выглядит примерно так:
from flake8.api import legacy
def check_style_func(filename):
style_guide = legacy.get_style_guide()
report = style_guide.check_files([filename])
if report.total_errors == 0:
# do something and return
else:
# do another thing and return
Проблема в том, что все ошибки печатаются в стандартном выводе и смешиваются с выводом программы, есть ли способ передать «—output-file=FILE» в версию api flake8?
У get_style_guide
функции есть **kwargs
параметр, я уже пытался вызвать get_style_guide(output_file='file.txt')
и get_style_guide(options='--output-file=file.txt')
, но это не сработало.
Ответ №1:
Я только что нашел обходной путь: redirect_stdout
from flake8.api import legacy
import io
from contextlib import redirect_stdout
def check_style_func(filename):
with io.StringIO as out, redirect_stdout(out):
style_guide = legacy.get_style_guide()
report = style_guide.check_files([filename])
flake8output = out.getvalue()
if report.total_errors == 0:
# do something and return
else:
# do another thing and return
Решение состоит в том, чтобы открыть буфер и перенаправить stdout
в буфер во время выполнения flake8, затем я сохраняю содержимое буфера в переменной, чтобы позже записать в файл.
Ответ №2:
Это не совсем то, что вы хотите, но передача quiet=3
сработала для меня, чтобы отключить вывод. Сейчас я просто хочу получить доступ к этим данным, которые, похоже, хранятся в report._stats._store
(но это частный API).