Эта небольшая заметка будет полезна тем, кто разрабатывает веб приложения (и не только) на удаленном сервере (к примеру используя плагин «Remote development» в Visual Studio Code).
Суть проблемы.
Допустим Вы хотите что-то распечатать в консоль.
hello = "world"
print(hello)
>>> world
Пока программа небольшая, то с этим нет никаких проблем. Предположим что вы работаете с каким либо классом, в котором к примеру ~3000 строчек. Количество "принтов" увеличивается, и понять с первого раза какой "принт" к какой переменной относится становится не просто. Можно конечно писать вот так.
print('hello=', hello)
Да это уже лучше. Но все равно хотелось бы видеть и номер строки и тип переменной. А в некоторых случаях и путь к файлу.
Для таких случаев я написал небольшую (и очень удобную) утилиту, которая облегчит Вам жизнь. Давайте попробуем ее установить.
pip install simple-print
И что-нибудь попечатать.
from simple_print import sprint
master = "yoda"
# Напечатаем имя переменной с номером строки
sprint(master)
# И покрасим красным цветом
sprint(master, c="red")
# Добавим белый фон
sprint(master, c="red", b="on_white")
# И подчеркивание
sprint(master, c="red", b="on_white", a="underline")
# И путь к файлу
sprint(master, c="red", b="on_white", a="underline", p=True)
# Вернем как строку
s = sprint(master, s=True) # return as string
# И распечатаем
print(s)
Исходный код можно посмотреть тут https://github.com/Sobolev5/simple-print
Продуктивной и удобной Вам разработки.
Комментарии (11)
baldr
13.09.2022 18:43+2loguru закрывает бОльшую часть потребностей, может выводить стектрейс с содержимым переменных в текущей строке и еще дофига всего.
А, да, и еще он не тащит за собой pydantic, pika (?!?) и остальные странные зависимости, которые вы зачем-то требуете.
И тесты у него есть.
Sobolev5 Автор
13.09.2022 19:24Спасибо за интересное решение. Посмотрю.
По поводу pydantic и pika, они нужны для логирования в кликхаус через rabbitmq. Возможно кому то это также пригодится, но об этой возможности я не стал писать, чтобы не перегружать статью. Примеры есть в документации на github.
baldr
13.09.2022 19:40Андрей, я постараюсь написать помягче, но не факт что у меня получится..
Ваш код ужасен. Я зашел на гитхаб и попробовал посмотреть на исходники.
Мало того что этот проект (просто логгер!) тащит за собой какие-то левые файлы с кликхаусом (?), так еще и ставит библиотеки, которые совсем не нужны для заявленной задачи. Файл с кликхаусом, кстати, работать все равно не будет, поскольку он импортирует библиотеку, которая не ставится.
Возможно кому то это также пригодится, но об этой возможности я не стал писать, чтобы не перегружать статью.
ну это вот уже вообще за гранью добра и зла. А потом оно еще будет тащить десятки мегабайт из, скажем, pandas? Вдруг понадобится кому?
Я даже не буду ничего говорить про сам код. Какие-то assert, куча условий.. И, вдобавок, все тело великой функции "sprint()" спрятано под условием "if DEBUG or broker". Хитро.
Для себя вы можете писать какие угодно велосипеды (и каждый для себя пишет), какого угодно качества. Но если уж вы оформляете это в статью - хотя бы делайте это качественно. Ну и будьте готовы к критике как в этом комментарии, например.
Sobolev5 Автор
14.09.2022 09:40Cделал рефакторинг, пофиксил по вашим замечаниям. Спасибо за критику.
Теперь "минимальный" пакет ставится
pip install simple-print
"Максимальный"
pip install simple-print[broker]
И да вы правы, это изначально внутренний велосипед для текущих задач, но все же я думаю кому то он будет весьма полезен.
Andrey_Solomatin
13.09.2022 19:30Кажется вы лечите симптомы.
Предположим что вы работаете с каким либо классом, в котором к примеру
~3000 строчек. Количество "принтов" увеличивается, и понять с первого
раза какой "принт" к какой переменной относится становится не просто.Это плохой код, тут не принты нужны а рефакторинг.
Немного кокретики на примере вашей библиотеки. У кода неприлично высокая цикломатическая сложность. Это проблема. Перепишите на сложность не более 10 и тогда проблема с тем, что непонятно откуда идёт печать изчезнет.кто разрабатывает веб приложения (и не только) на удаленном сервере
Эту жутко неудобно, но иногда приходится. Я решаю эту проблему юнит тестами. При этом подходе практически ничего не надо удалённо дебажить.
Sobolev5 Автор
14.09.2022 09:43К сожалению иногда вам подобные классы достаются в "наследство" от кого-то еще, а задача на рефакторинг задвигается в беклог.
SyrexS
А чем стандартный логгер не устроил?
Sobolev5 Автор
Данное решение не является противопоставлением стандартному логгеру, а скорее дополняет его в некоторых ситуациях. Особенно при отладках сложных расчетов (в моем случае).
baldr
"Фатальный недостаток", увы. Сорри за сарказм, но других причин я не вижу.