Мелкая питонячая радость #7: три штуки по цене одной — консольная анимация, алгоритмы и отладка

    На этой неделе достаточно крупных мелких радостей не нашлось, зато нашлись 3 совсем мелкие мелкие радости.


    termtosvg


    Сейчас принято снабжать свои библиотеки и репо на github красивой анимацией, показывающей консоль с живой демкой вашего творения.


    image


    Традиция, бесспорно, хорошая и правильная. Только записывать такие анимации бывает трудно/лень/некогда. Авторы termtosvg пристрелили всех зайцев одим выстрелом и дали программистам прекрасную штуку для записи консольных демок.


    В отличие от многих других решений, termtosvg пишет не видео или гифку. Эта штука ловит все происходящее в консоли и рендерит SVG анимацию на основе того, что появляется в терминале. На выходе вы получаете не анимацию именно вашего экрана, а красивый и стильный рендер консольных операций. SVG весит куда меньше других форматов, а еще его можно достаточно легко редактировать.


    Для взыскательных людей прилагается несколько предустановленных цветовых решений, чтобы вы могли кастомизировать свои живые демки.


    Можно рендерить вывод в светлой теме:



    Можно рендерить в такой вот темной теме, с кнопками управления окна и прогрессбаром внизу:



    А можно еще в десятке других цветовых решений.


    Ставится все как обычно,


    pip install termtosvg

    маководы могут поставиться еще и через brew (нужные версии Python и еще пачка зависимостей подтянется сама)


    brew install termtosvg

    Мануал лежит тут, полный список предустановленных тем для рендера — здесь. Все это на Python, так что можно как минимум читатать интересные исходники, если нужды в анимациях консоли у вас нет.


    Сборник алгоритмов The Algorithms


    The Algorithms на Python. Этот репо уже многие видели и он на слуху — почти 50 000 звезд на github. Реализация пачки классических алгоритмов на чистом Python — графы, математика, шифрование, протоколы, сетевая маршрутизация и куча всего разного.


    Для повседневной работы такое понадобится мало кому, но очень пригодится для общего развития или для подготовки к интервью в компанию, которая может предложить вам поработать с бинарным деревом на собеседовании.


    В наличии есть не только питонячие реализации, но и другие языки.


    icecream



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


    Но иногда бывает так, что инженерам приходится шлепать в коде старый добрый print(), чтобы разобраться в происходящем.


    if something:
        print(1)
        operation_one()
    else:
        print(2)
        operation_two()

    Метод отладки спорный, грязный, действенный и на любителя. Для таких любителей существует питонячая библиотека icecream (а еще реализации для C++, Node.JS, Rust, Dart и PHP).


    Теперь можно написать


    from icecream import ic
    
    def foo():
        ic()
        first()
    
        if expression:
            ic()
            second()
        else:
            ic()
            third()

    и получить в ответ отладочный код типа


    ic| example.py:4 in foo()
    ic| example.py:11 in foo()

    За отладку чисто таким вот методом лично я врезал бы по шее, но при определенных модификациях это можно использовать. Еще в этой либе есть кое-что еще, что может быть полезным:


    • Возможность быстро и легко залогировать на выход входные аргументы и результат работы функций.
    • Кастомизировать вывод разными префиксами и данными.
    • Повесить свои кастомные функции для обработки вывода отладочных сообщений.

    Если это все аккуратно скомбинировать с разными флагами-переключалками из режима отладки в режим продакшн, то получается вполне себе вменяемая штука, которая доступно расскажет обо всем, происходящем у вас в коде.

    • +31
    • 7.4k
    • 9
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 9

      +5

      Вот эта штука поинтереснее чем icecream: https://github.com/cool-RR/PySnooper

        +1
        Спасибо, классная штука, стоит включить в следующие статьи
          0

          Мне кажется, она просто немного для другого.
          Но вместе хорошо дополняют другдруга

          0
          А termosvg сравнивали с asciinema?
          А вместо print-ов стараюсь запускать скрипт с pdb
          python -m pdb myscript.py
          если тяжело добраться, то перед местом отладки уже вставляю код
          import pdb; pdb.set_trace()
          а там уже step by step… отлаживаю.
            0
            а как же функция breakpoint()?
              0

              К сожалению она доступна только с версии 3.7

                0
                Но это же стейбл…
            +3

            Было бы круто ещё в шапку вставлять ссылки на предыдущие подборки. Just saying.

              0
              Начал изучать программирование и python в частности.
              Использую Jupyter с Anaconda.
              До сих пор расставлял print-ы (я больше не буду, честно-честно), и вдруг открыл для себя breakpoint.
              Но тут же столкнулся с тем, что в среде Юпитера/Анаконды дебаггер шагает в т.ч. по выполнению самого кода среды. И это весьма утомительно.
              Может, есть какой-нибудь достаточно простой путь сказать дебаггеру, чтобы «игнорировал Анаконду до особого распоряжения»?

              Only users with full accounts can post comments. Log in, please.