LINUX.ORG.RU

Подсветка и фильтрация строк на Python

 , ,


0

1

Ищу консольную утилиту для хитрой подсветки и фильтрации файлов, суть такова:

Есть файл с набором строк (лог файл, выхлоп diff, выхлоп компиляции). Каждую строку нужно распасить, расцветить и назначить какую-то категорию (INFO/WARNING/ERROR, ADDED/REMOVED, COMMENT/COMMAND/WARNING/ERROR). Категорию нужно уметь показывать для каждой строки. Правила (паттерны) должны храниться в отдельных файлах, паттерны могут быть многострочными. Правила должны как-то определять цвет (либо для всей строки, либо для частей).

Обязательно:

  • Должна быть возможность скрывать вывод, пока не встретится определённый паттерн (например, ERROR), после этого включать полный вывод обратно и вываливать всё, что накопилось (все INFO и WARNING, которые были до этого).
  • Должна быть возможность выйти после первого нахождения какой-то категории (например, ERROR).
  • Статистика по всем категориям.

Очень желательно:

  • Библиотека для Python (иногда нужно автоматически прикрепить фильтр к subprocess или stdout отдельной функции). Но в принципе подойдёт и сторонняя утилита под unix и оффтоп (MSYS/Cygwin или хотя бы сорцы).
  • Переписывать строки (заменять какие-то части подстановками, вызывать функции-обработчики), удалять пустые строки, отфильтровывать какие-то категории сообщений с концами, но это не критично.
  • Будет круто, если будет встроенный пейджер (a-la less).
  • Ещё use-case: msbuild выводит строчки с префиксами «порядковый номер проекта> реальная строка». Сейчас мне приходится отдельно собирать выхлоп для каждого проекта отдельно и заменять номер на айдишник проекта, вычитанный другим паттерном выше.

Пока пользуюсь самописным скриптом, пришло время для чего-то нормально отлаженного и протестированного.

Пробовал awk, но получившийся скрипт был ещё менее читаемым.

Сейчас смотрю на pygments, но ещё не все требуемые фичи нашёл.

★★★