首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将django call_command的输出保存到变量或文件中

如何将django call_command的输出保存到变量或文件中
EN

Stack Overflow用户
提问于 2014-10-25 05:55:18
回答 2查看 5.4K关注 0票数 20

我在Django中从一个类似如下的脚本中调用命令:

代码语言:javascript
复制
#!/usr/bin/python
from django.core.management import call_command
call_command('syncdb')
call_command('runserver')
call_command('inspectdb')

例如,如何将call_command('inspectdb')的输出赋值给变量或文件?

我试过了

代码语言:javascript
复制
var = call_command('inspectdb')

但'var‘仍然为none:目的:检查不是由django创建的遗留数据库中的现有表

EN

回答 2

Stack Overflow用户

发布于 2014-10-25 06:07:17

您必须重定向call_command的输出,否则它只会打印到stdout,而不返回任何内容。您可以尝试将其保存到一个文件中,然后像这样读取它:

代码语言:javascript
复制
with open('/tmp/inspectdb', 'w+') as f:
    call_command('inspectdb', stdout=f)
    var = f.readlines()

编辑:几年后再看这个,更好的解决方案是创建一个StringIO来重定向输出,而不是创建一个真正的文件。这里有一个来自Django's test suites的例子

代码语言:javascript
复制
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())
票数 22
EN

Stack Overflow用户

发布于 2020-04-14 23:08:13

这在“从代码运行管理命令>输出重定向”下的中有说明。

要保存到变量,您可以执行以下操作:

代码语言:javascript
复制
import io
from django.core.management import call_command


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

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

代码语言:javascript
复制
from django.core.management import call_command


with open('/path/to/command_output', 'w') as f:
    call_command('dumpdata', stdout=f)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26556875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档