26
>>> from django.core.management import call_command
>>> call_command('syncdb')

从 python 脚本中执行 syncdb 管理命令。但是,我想运行相当于

$ python manage.py syncdb --noinput

从 python shell 或脚本中。我怎样才能做到这一点?

如果我是否要创建超级用户的问题打断了我,以下几行将无法正常工作。

>>> call_command('syncdb', noinput = True) # asks for input
>>> call_command('syncdb', 'noinput') # raises an exception

我使用 Django 1.3。

4

1 回答 1

43
call_command('syncdb', interactive = False)

编辑:

我在源代码中找到了答案。所有管理命令的源代码都可以在名为的 python 模块中找到management/commands/(command_name).py

syncdb命令所在的python模块是django.core.management.commands.syncdb

要查找命令的源代码,您可以执行以下操作:

(env)$ ./manage.py shell
>>> from django.core.management.commands import syncdb
>>> syncdb.__file__
'/home/user/env/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.pyc'
>>> 

当然,检查syncdb.py 的内容,而不是syncdb.pyc。

或者查看在线资源syncdb.py脚本包含:

    make_option('--noinput', action='store_false', dest='interactive', default=True,
        help='Tells Django to NOT prompt the user for input of any kind.'),

这告诉我们,如果我们想使用该函数自动化命令--noinput,我们应该使用而不是在命令行上。interactivecall_command

于 2012-04-03T18:45:34.763 回答