2013-04-07 19 views
7

私はDjangoプロジェクトでWerkzeugを使用しようとしています。これは基本的にWebページのPythonシェルインターフェイスです。私はpython manage.py syncdbpython manage.py migrateのようなコマンドを実行したいが、Pythonシェルではそれほど簡単ではない。Pythonシェルからmanage.pyを実行するには

私はimport manageを試してみましたが、そこからコマンドを試しましたが、manage.pyのソースの外見からは、django.core.management.execute_from_command_line()に引数を渡すので、何も呼び出しません。

私も "Running shell command from Python and capturing the output" 示すように関数を定義しようとしたが、唯一

runProcess('Python manage.py syncdb') 

戻っ使ってそれを呼び出す:あなたは、コマンドラインからDjangoのシェルを起動することができ

<generator object runProcess at 0x000000000520D4C8> 

答えて

10

を:

次にインポートexecute_from_command_line

from django.core.management import execute_from_command_line 

そして最後に、あなたが必要とするコマンドを実行できます。

execute_from_command_line(["manage.py", "syncdb"]) 

それはあなたの問題を解決する必要があります。

subprocess module documentationをご覧ください。プロセスを実行して出力を確認することができます:

import subprocess 
output = subprocess.check_output(["python", "manage.py", "syncdb"]) 
for line in output.split('\n'): 
    # do something with line 
+0

ありがとうございます! – TreyENelson

0

注:これは、プロダクションコードに入れることのできるものではありません。

あなたがipythonを使用している場合は、

!python manage.py syncdb 

を行うことができます '!'言う:

あなたがしたい
pip install ipython 

:私はあなたがピップインストールしている場合は、シェルコマンドである場合

としてこれを実行する

、あなたがipython得ることができますコマンドラインで実行します(Pythonインタープリタではありません)。あなたの環境がどのように設定されているかに応じて、その前にsudoを投げる必要があるかもしれません。

+0

これは理想的な解決策ですが、ipythonをインストールした後、Pythonシェルから '!python manage.py syncdb'を実行すると、IPythonをインポートする前後で'! 'に構文エラーが返されます。 – TreyENelson

+0

あなたはまだ 'python'でpythonシェルを起動していますか?あなたは 'ipython'を使いたいでしょう。 ipythonシェルはPythonシェルのように動作しますが、 '!'のようないくつかの機能が追加されています。 – bgschiller

+0

werkzeugは通常のPythonシェルを使用しているので、ああ、意味がありますが、元の問題は実際には解決しません。 (私が見逃した設定がいくつかあり、ipythonシェルを使用するよう指定していない限り) – TreyENelson

関連する問題