我在类似于以下脚本的脚本中调用Django中的命令:
#!/usr/bin/python
from django.core.management import call_command
call_command('syncdb')
call_command('runserver')
call_command('inspectdb')
Run Code Online (Sandbox Code Playgroud)
如何将例如call_command('inspectdb')的输出分配给变量或文件?
我试过了
var = call_command('inspectdb')
Run Code Online (Sandbox Code Playgroud)
但是'var'仍然是none:目的:检查不是由django创建的旧数据库中的现有表
Bin*_*gsF 16
你必须重定向call_command的输出,否则它只是打印到stdout但没有返回任何内容.您可以尝试将其保存到文件中,然后像这样读取它:
with open('/tmp/inspectdb', 'w+') as f:
call_command('inspectdb', stdout=f)
var = f.readlines()
Run Code Online (Sandbox Code Playgroud)
编辑:几年后看看这个,更好的解决方案是创建一个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())
Run Code Online (Sandbox Code Playgroud)
这记录在Django 文档中的“从代码运行管理命令 > 输出重定向”下。
要保存到变量,您可以执行以下操作:
import io
from django.core.management import call_command
with io.StringIO() as out:
call_command('dumpdata', stdout=out)
print(out.getvalue())
Run Code Online (Sandbox Code Playgroud)
要保存到文件,您可以执行以下操作:
from django.core.management import call_command
with open('/path/to/command_output', 'w') as f:
call_command('dumpdata', stdout=f)
Run Code Online (Sandbox Code Playgroud)