Weasyprint Отключает все предупреждения
Использую WeasyPrint, но он всегда заваливает меня информацией, сообщениями о дебюте.
Как мне отключить их все? Ничего из того, что я пробовал, не работает. (С использованием Django)
Спасибо
Если это происходит во время генерации PDF-файла - приведенное ниже работает в FastAPI
контекстах (и моим примером использования было преобразование HTML в PDF), и я не вижу причин, по которым это не сработало бы и в Django
или для других этапов генерации.
Будьте осторожны, так оно и есть... это не обязательно взлом, но и не очень чистый подход - он влияет на поведение на уровне операционной системы и поэтому может быть нестабильным для всех сред или путей параллельного выполнения.
Что он делает, так это в основном перенаправляет stderr
туда, где вы не можете его увидеть в контексте выполнения, заданном менеджером, а затем возвращает его в нормальное состояние:
import contextlib
import sys
import tempfile
from weasyprint import HTML
@contextlib.contextmanager
def suppress_stderr():
with tempfile.TemporaryFile() as f:
stderr_fd = sys.stderr.fileno()
sys.stderr.flush()
saved_stderr_fd = os.dup(stderr_fd)
os.dup2(f.fileno(), stderr_fd)
try:
yield
finally:
os.dup2(saved_stderr_fd, stderr_fd)
os.close(saved_stderr_fd)
with tempfile.NamedTemporaryFile(delete=False, dir=PDF_TMP_PATH, suffix='.pdf') as pdf:
try:
with suppress_stderr():
HTML(string=content).write_pdf(pdf.name)
except Exception as e:
...