2011-09-02 9 views
24
>>> from django.core.management import call_command 
>>> call_command('syncdb') 

は、pythonスクリプト内からsyncdb管理コマンドを実行します。しかし、私はcall_commandでDjangoの `syncdb --noinput`を実行するにはどうしたらいいですか?

$ python manage.py syncdb --noinput 

のpythonシェルまたはスクリプト内から相当するものを実行したいと思います。どうやってやるの?

スーパーユーザーを作成するかどうかの質問に私を妨害することなく、次の行が機能しません。

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

私はDjango 1.3を使用しています。

+2

解決済み: 'call_command( 'syncdb'、interactive = False)' – pvoosten

+0

[この質問の重複](http://stackoverflow.com/questions/2772990/programmatically-sync-the-db-in-django)? –

+2

@lbp解答をコメントに挿入するのではなく、解答に挿入して受け入れるべきです。そうでなければ、この質問は永遠に受け入れられる回答ではありません。 –

答えて

42
call_command('syncdb', interactive = False) 

EDIT:

私は、ソースコードで答えを見つけました。

:すべての管理コマンドのソースコードは syncdbコマンドが存在するのpythonモジュールは、あなたがこのような何かを行うことができ、コマンドのソースコードを検索するに django.core.management.commands.syncdb

あるmanagement/commands/(command_name).py

と呼ばれるPythonモジュールで見つけることができます

(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の内容を確認してください。

それともonline sourceを見て、syncdb.pyスクリプトが含まれています。代わりに、コマンドラインで--noinputの我々はcall_command機能を持つコマンドを自動化したい場合は、我々はinteractiveを使用する必要があることを教えてくれる

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

を。

+0

'noinput'の代わりに' interactive'を使う理由を知っていますか?これはDjangoのドキュメントにありますか? –

+0

私が知る限り、この件に関する文書はかなり不明です。ここに例があります:https://docs.djangoproject.com/en/dev/ref/django-admin/#running-management-commands-from-your-code – pvoosten

+0

ありがとうございましたあなたの答えは – ihatecache

関連する問題