Это подключаемая библиотека, для удобного вывода отладочной информации.
Project description
Что это?
Это подключаемая библиотека, для удобного вывода отладочной информации.
Как использовать ?
1 Сначала нужно создать экземпляры класса Debugger
Можно вручную указать параметры экземпляра
-
Debug_Name = Debugger(active: bool,,title_name: str, consoleOutput: bool = True, fileConfig: Optional[Dict] = None style_text: Optional[dstyle] = None)
-
active
= on/off жизни экземпляра, ЕслиFalse
экземпляр будет игнорировать вызов, а также будет добавлен в массивDebugger.AllCountSleepInstance
. -
title_name
= Уникальное имя экземпляра которое будет отображаться в выводе. -
consoleOutput
= on/off отображения в консоль или другие визуальные выходы, не влияет на запись в файл!. -
fileConfig
= Конфигурация записи в файл, входные параметры такие же как и у стандартной функцииopen()
передавать в форматеDict{"file":"test.log", ... }
. Для удобного формирования параметров можно
пользоваться функциейdopen()
. -
style_text
= Стиль отображения текста. Для удобного формирования параметров можно
пользоваться функциейdstyle
.
-
Или использовать готовые параметры
Debug_Name = Debugger(**dDEBUG)
- dDEBUG
- dINFO
- dWARNING
- dEXCEPTION
2 Установить глобальный стиль для всех экземпляров
Эта команда влияет на все экземпляры Debugger
Debugger.GlobalManager(global_status=None, typePrint: Optional[str] = "grid"):
-
global_status
= Вы можете on/off все экземпляры разом -
typePrint=
= Глобальный стиль отображения данных"grid"
= Стиль таблица
-
"socket"
= Данные будут отправляться по сокету, в данный момент есть два варианта прослушивания сокета. Через GUI Tkinterconsole_debugger/main.py gui
или через TUI Urwidconsole_debugger/main.py tui
. Если в процессе отправки данных через сокет возникнут ошибки, данные будут сохранены в файл. -
None
= Без стиля
-
3 Использовать в коде
Вызывать экземпляр напрямую
Debug_Name(text,*args, sep=' ', end='\n')
Debug_Name
= Имя экземпляраDebugger
text
= Строка*args, sep=' ', end='\n'
= такие же, как и у встроенной функцииprint()
Либо использовать функцию printD
для однородности
printD(Debug_Name, text, *args, sep=' ', end='\n')
Debug_Name
= Имя экземпляраDebugger
text
= Строка*args, sep=' ', end='\n'
= такие же, как и у встроенной функцииprint()
Примеры
Использовать свои стили, вызывать экземпляры напрямую
Для наглядности создадим функцию для генерации случайного слово
import random
import string
# Сгенерировать случайное слово
random_word = lambda: "".join(random.choice(string.ascii_letters) for j in range(random.randint(1, 40)))
from console_debugger import *
Debug = Debugger(True,title_name="[DEBUG]",
fileConfig=dopen(file="debug.log",
mode="a",
encoding="utf-8"),
style_text=dstyle(bg_color="bg_blue",
len_word=21)
)
Info = Debugger(True,title_name="[INFO]",
fileConfig={"file": "info.log",
"mode": "a", "encoding": "utf-8"},
style_text=dstyle(len_word=25),
consoleOutput=False
)
Warning = Debugger(True,"[WARNING]", style_text=dstyle(len_word=25))
Debugger.GlobalManager(typePrint="grid")
if __name__ == '__main__':
for i in range(10):
Warning(random_word())
Debug(random_word())
Info(random_word())
Использовать готовые стили, вызывать printD
from console_debugger import *
Debug = Debugger(**dDEBUG)
Info = Debugger(**dINFO)
Warning = Debugger(**dWARNING)
Debugger.GlobalManager(typePrint="grid")
if __name__ == '__main__':
for i in range(10):
printD(Debug, random_word())
printD(Warning, random_word())
printD(Info, random_word())
Использовать soket
from console_debugger import *
Debug = Debugger(**dDEBUG)
Info = Debugger(**dINFO)
Warning = Debugger(**dWARNING)
TEST = Debugger(True,"TEST")
Debugger.GlobalManager(typePrint="socket")
for i in range(10):
printD(Debug, random_word())
printD(Info, random_word())
printD(Warning, random_word())
printD(TEST, random_word())
Использование Глобального режима on/off
Создать два режима запуска Debug/Release
main.pyw
import sys
from console_debugger import Debugger
from app.viwe import Windows # При импорте должны быть созданы все экземпляры
if __name__ == '__main__':
for param in set(sys.argv):
if param == "--d":
Debugger.GlobalManager(typePrint="grid") # Задать глобальный стиль всем экземпляром
break
else:
Debugger.GlobalManager(global_status=False) # Если нет параметров отключаем все экземпляры
Windows()
В других модулях создаем необходимые экземпляры
from console_debugger import *
HotKeyD = Debugger(True, "[HotKey]")
PressKeyD = Debugger(True, "[PressKey]")
InfoD = Debugger(**dINFO)
ResD = Debugger(True, "[Result]", style_text=dstyle(len_word=25, height=4))
printD(HotKeyD,"Crtl+c")
Использование во Flask
Поместить Debugger.GlobalManager
в @app.before_first_request
from console_debugger import *
from flask import *
SECRET_KEY = "123_very_hard_password"
app = Flask(__name__)
# Экземпляры в глобальной области видимости
cookDeb = Debugger(True, "[Cook]")
sessionDeb = Debugger(True, "[Session]")
@app.before_first_request
def deb():
# Tkinter будет перезапускаться при каждом обновление сервера
Debugger.GlobalManager(typePrint="socket")
@app.route("/login", methods=['POST', 'GET'])
def login():
global data, cookDeb, sessionDeb
cook = "no"
ses = "no"
# Получить куки если есть
if request.cookies.get("logged"):
cook = request.cookies.get("logged")
# Получить данные из сессии если есть
if "SessioN" in session:
ses = session.get("SessioN")
printD(cookDeb, cook)
printD(sessionDeb, ses)
res = make_response(render_template("login.html", cook=cook, session=ses))
res.set_cookie(key="logged", value="yes", max_age=3)
session["SessioN"] = "yes"
return res
if __name__ == '__main__':
app.run(debug=True)
"login.html"
<script>
document.cookie = "ex=1;";
if (!document.cookie) {
alert("Этот сайт требует включение cookie");
}
</script>
Cook: {{ cook }}
<p></p>
Session: {{ session }}
<form action="/login" method="post" class="form-contact">
<p><label>Name </label><input type="text" name="username" value="" required/>
<p><label>Passwortitled </label><input type="text" name="password" value="" required/>
<p><input type="submit" value="Send"/>
</form>
Советы
Вы можете использовать шаблон для комментирования printD
Так как входные параметры функции являются не изменяемыми обметками,
то они копируются в функцию printD
, чтобы н тратить лишении наносекунды
на эту операцию, вы можете закомментировать все вызовы этой функции.
\s{4}printD+
#none: printD
А потом раскомментировать
#none: printD
printD
Про режим отображения Tkinter
- Если нажать на заголовок консоли, то они выполнят команду из нижней консоли
- Если нажать нижнею кнопку
save geometry
то вы сохраните положение окна для следующих запусках, размеры сохранять вconsole_debugger/gui/static/config.txt
- Если закрыть окно
Tkinter
, до завершения главного потока, то данные будут отправляться в консольtypePrint=None"
- Можно сохранить весь текст из консоли в файл. Для этого нужно ввести в нижнею консоль
save <NAME_FILE> <PATH>
и нажатьEnter
- Можно получить глобальную информацию о сокете написав в любую нижнею консоль
g info
и нажатьEnter
- Можно отчистить консоль вывода если написать в нижнею консоль
clear
и нажатьEnter
Установка Tkinter на Linux
ArchLinux
sudo pacman -S tk
xrdb -load /dev/null
xrdb -query
Про режим отображения Urwid
Работает также в терминале Pycharm
Этот режим поддерживается в терминалах Linux. Программа находиться в console_debugger/tui/main.py
.
-
Можно сохранить весь текст из консоли в файл. Для этого нужно ввести
save <NAME_FILE> <PATH>
-
Горячие клавиши
f1
= Влевоf3
= Верхf2
= Внизf4
= ВправоTab
= Вправоshif + ЛКМ
= Выделить текстshif + ctrl + C
= Копировать выделенный текстshif + ctrl + V
= Вставить текст
-
Можно отчистить консоль вывода если написать в нижнею консоль
clear
и нажатьEnter
Про доступную информации об экземпляре Debugger
-
public set:
consoleOutput
= Переключить on/off вывод в консольstyle_text
= Задать другой стиль текстаactive()
= Включить дебагерdeactivate()
= Отключить дебагер
-
public get:
title_name
= Уникальное имя дебагераfileConfig
= Конфигурация для файлаAllCountActiveInstance()
= Все активные дебагерыAllCountSleepInstance()
= Все приостановленный дебагирыAllUseFileName()
= Все используемые имена файловAllInstance()
= Все экземпляры дебагеров
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for console_debugger-0.1.7.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 333bf5fa29589adf17c9995571baadfa68025cbde3a9ac4a73465f9c52cbcf5a |
|
MD5 | 27a0026fc60d2e7d9a006aed72f754b4 |
|
BLAKE2b-256 | a833d7c7e1e1a2592d3156d63b2f0afc0b3be8d8fa78d10144b09f37c2042d5a |