Как сохранить вывод из django call_command в переменную или файл

Я вызываю команды в Django из script, похожие на:

#!/usr/bin/python
from django.core.management import call_command
call_command('syncdb')
call_command('runserver')
call_command('inspectdb')

Как назначить вывод из экземпляра call_command ('inspectdb') для переменной или файла?

Я пробовал

var = call_command('inspectdb')

но "var" остается ничем: цель: проверить существующие таблицы в старых базах данных, не созданных django

Ответ 1

Вы должны перенаправить вывод call_command, иначе он просто печатает на стандартный вывод, но ничего не возвращает. Вы можете попробовать сохранить его в файл, а затем прочитать его так:

with open('/tmp/inspectdb', 'w+') as f:
    call_command('inspectdb', stdout=f)
    var = f.readlines()

РЕДАКТИРОВАТЬ: Глядя на это пару лет спустя, лучшим решением будет создание StringIO для перенаправления вывода вместо реального файла. Вот пример из одного из тестовых наборов Django:

from io import StringIO

def test_command(self):
    out = StringIO()
    management.call_command('dance', stdout=out)
    self.assertIn("I don't feel like dancing Rock'n'Roll.\n", out.getvalue())