# Что это?
Это библиотека для Python, которая выводит информации в несколько консолей. Путем обмена данных через Unix Socket
Установка через [pip - console-debugger](https://pypi.org/project/console-debugger/)
```bush
pip install console-debugger
```
![](https://i.imgur.com/w1DMqV5.png)
---
# Как использовать ?
## 1 Сначала нужно создать экземпляры класса Debugger
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()` передавать в формате `{"file":"test.log", ... }` . Для удобного формирования параметров можно пользоваться функцией `dopen()`. |
| `style_text` | Стиль отображения текста. Для удобного формирования параметров можно пользоваться функцией `dstyle`. |
---
Также можно использовать готовые параметры
Debugger(`**console_debugger.dDEBUG`)
- `console_debugger.dDEBUG`
- `console_debugger.dINFO`
- `console_debugger.dWARNING`
- `console_debugger.dEXCEPTION`
---
Доступная информации об экземпляре `Debugger`
| public set | Описание |
| --------------- | ---------------------------------- |
| `consoleOutput` | Переключить on/off вывод в консоль |
| `style_text` | Задать другой стиль текста |
| `active()` | Включить дебагер |
| `deactivate()` | Отключить дебагер |
| public get | Описание |
| -------------------------- | ------------------------------------------- |
| `title_name` | Уникальное имя дебагера |
| `fileConfig` | Конфигурация для файла |
| `AllCountActiveInstance()` | Список со всеми активными экземплярами |
| `AllCountSleepInstance() ` | Список со всеми остановленными экземплярами |
| `AllUseFileName()` | Список всех имен используемых файлами |
| `AllInstance()` | Список всех экземпляров |
## 2 Создать глобальные правила для всех экземпляров
Эта команда влияет на все экземпляры `Debugger`
Debugger.GlobalManager(`global_status=None, typePrint: Optional[str] = "grid"`):
| Атрибут | Описание |
| --------------- | ------------------------------------------------------------------------- |
| `global_status` | Здесь вы можете Выключить/Включить все экземпляры |
| `typePrint` | Глобальный стиль отображения данных (`grid`/`socket`/`None`) |
---
- `"grid"` = Стиль таблица
![](https://i.imgur.com/Kif40aB.png)
- `"socket"` = Данные будут отправляться по сокету, в данный момент есть два варианта прослушивания сокета.
Через GUI [Tkinter](#про-режим-отображения-tkinter) `console_debugger/main.py gui` или через TUI [Urwid](#про-режим-отображения-urwid)
`console_debugger/main.py tui`.
Если в процессе отправки данных через сокет возникнут ошибки, данные будут сохранены в файл.
- `None` = Без стиля
![](https://i.imgur.com/byg84id.png)
---
## 3 Использовать в коде
Использовать стандартную функцию `print`.
print(`text, file= Debug_Name`)
- `text` = Строка
- `Debug_Name` = Имя экземпляра `Debugger`
---
Использовать функцию `printD`. Преимущество в том что может принимать несколько переменных и соеденять их.
printD(`Debug_Name, text, *args, sep=' ', end='\n'`)
- `Debug_Name` = Имя экземпляра `Debugger`
- `text` = Строка
- `*args` = Данные преобразуются в тип `str`
- `sep=' ', end='\n'` = такие же, как и у встроенной функции `print()`
---
# Примеры
## Использовать свои стили, вызывать экземпляры напрямую
Для наглядности создадим функцию для генерации случайного слово
```python
import random
import string
# Сгенерировать случайное слово
random_word = lambda: "".join(random.choice(string.ascii_letters) for j in range(random.randint(1, 40)))
```
```python
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):
printD(Debug, random_word())
printD(Warning, random_word())
printD(Info, random_word())
```
## Использовать готовые стили, вызывать `printD`
```python
from con