>>> 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。
答案 0 :(得分:42)
call_command('syncdb', interactive = False)
编辑:
我在源代码中找到了答案。所有管理命令的源代码都可以在名为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。
或者查看online source,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
函数自动执行命令,那么我们应该使用interactive
而不是命令行中的call_command
。