簡體   English   中英

如何將 django call_command 的輸出保存到變量或文件

[英]How to save output from django call_command to a variable or file

我正在從類似於以下的腳本中調用 Django 中的命令:

#!/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 創建的遺留數據庫中的現有表

您必須重定向 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())

這在Django 文檔中的“從您的代碼運行管理命令 > 輸出重定向”下進行了記錄。

要保存到變量,您可以執行以下操作:

import io
from django.core.management import call_command


with io.StringIO() as out:
   call_command('dumpdata', stdout=out)
   print(out.getvalue())

要保存到文件,您可以執行以下操作:

from django.core.management import call_command


with open('/path/to/command_output', 'w') as f:
    call_command('dumpdata', stdout=f)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM