---
slug: "マネジメントコマンドをview関数内から実行する"
title: "マネジメントコマンドをview関数内から実行する"
description: "# -*- coding: utf-8 -*-"
url: "https://www.ytyng.com/blog/マネジメントコマンドをview関数内から実行する"
publish_date: "2011-06-09T01:45:52Z"
created: "2011-06-09T01:45:52Z"
updated: "2026-02-26T20:44:15.273Z"
categories: ["Django"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/0e228dbdaf914f01b50744f618b5b757.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

# マネジメントコマンドをview関数内から実行する

<pre><cord># -*- 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()

</cord></pre>
