Flake8: Как передать параметры в устаревший API?

#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).