Django управляет набором команд stdout и stderr

Есть ли способ установить stdout и stderr из base_stealth_options в BaseCommand при выполнении команды django? Я не могу найти никакой документации о том, как использовать эти опции. Например, я хотел бы установить stdout и stderr для регистратора info и error при запуске python manage.py foo.

Ссылка на код: https://github.com/django/django/blob/stable/5.2.x/django/core/management/base.py#L269

Это моя попытка создать свой собственный manage_custom_logging.py. Мне интересно, есть ли лучший способ сделать это, поскольку существует base_stealth_options.

# manage_custom_logging.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""

import os
import sys
import traceback
import logging

logger = logging.getLogger('manage_custom_logging')
class StreamToLogger(object):
    def __init__(self, logfct):
        self.logfct = logfct

    def write(self, buf):
        for line in buf.rstrip().splitlines():
            self.logfct(line.rstrip())

    def flush(self):
        pass


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_django_app.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            'available on your PYTHONPATH environment variable? Did you '
            'forget to activate a virtual environment?'
        ) from exc

    try:
        sys.stdout = StreamToLogger(logging.info)
        sys.stderr = StreamToLogger(logging.error)
        execute_from_command_line(sys.argv)
    except Exception:
        logger.error(traceback.format_exc())


if __name__ == '__main__':
    main()
Вернуться на верх