[英]How to call django custom command from code? call_command() doesn't work
[英]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.