# -*- coding: utf-8 -*- """ management_command_launcher.py マネジメントコマンドをview関数から実行 クラスにした方がよかったか? マネジメントコマンド内で、出力を self.stdout.write() で行ってないと 正しく結果を得られない。 (print() などされると拾えない) """ import StringIO from django.core.management.base import CommandError from django.utils.encoding import smart_str def launch_management_command(command_module, *args, **options): """ @args (module) command_module: Command クラスを含むモジュール名。 例: from appname.management.commands import hoge_command result = launch_management_command(hoge_command, ... ) """ log_buffer = StringIO.StringIO() command_instance = command_module.Command() command_instance.stdout=log_buffer command_instance.stderr=log_buffer try: output = command_instance.handle(*args, **options) if output: log_buffer.write(smart_str(output)) except CommandError, e: log_buffer.write(smart_str(e)) log_buffer.seek(0) return log_buffer.read()
コメント