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

Pythonスクリプト内からsyncdb管理コマンドを実行します。しかし、私は同等のものを実行したい

$ python manage.py syncdb --noinput

Pythonシェルまたはスクリプト内から。どうやってやるの?

次の行は、スーパーユーザーを作成するかどうかという質問で私を邪魔せずに機能しません。

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

私はDjango1.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.pycではなくsyncdb.pyの内容を確認してください。

または、オンラインソースを見ると、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ます。

于 2012-04-03T18:45:34.763 に答える