How can I perform Django's `syncdb --noinput` with call_command?
Asked Answered
L

1

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

executes the syncdb management command from within a python script. However, I want to run the equivalent of

$ python manage.py syncdb --noinput

from within a python shell or script. How can I do that?

The following lines don't work without interrupting me with the question whether I want to create a super user.

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

I use Django 1.3.

Looper answered 2/9, 2011 at 7:56 Comment(3)
Solved: call_command('syncdb', interactive = False)Looper
Duplicate of this question?Stentorian
@lbp you shouldn't insert the solution in a comment, but in an answer and then accept it. otherwise this question will be without an accepted answer forever.Culex
L
44
call_command('syncdb', interactive = False)

EDIT:

I found the answer in the source code. The source code for all management commands can be found in a python module called management/commands/(command_name).py

The python module where the syncdb command resides is django.core.management.commands.syncdb

To find the source code of the command you can do something like this:

(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'
>>> 

Of course, check the contents of syncdb.py, and not syncdb.pyc.

Or looking at the online source, the syncdb.py script contains:

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

that tells us that instead of --noinput on the command line, we should use interactive if we want to automate commands with the call_command function.

Looper answered 3/4, 2012 at 18:45 Comment(2)
Does anyone know why you use interactive instead of noinput? Is this in the Django docs anywhere?Araxes
As far as I can tell, the documentation on this subject is quite obscure. There is an example here: docs.djangoproject.com/en/dev/ref/django-admin/…Looper

© 2022 - 2024 — McMap. All rights reserved.