2013-04-07 32 views
7

Sto cercando di utilizzare Werkzeug nel mio progetto Django, che è essenzialmente un'interfaccia della shell Python della pagina web. Voglio eseguire comandi come python manage.py syncdb e python manage.py migrate ma nella shell Python non è molto semplice.Come eseguire manage.py dalla shell Python

Ho provato import manage e tentando i comandi da lì, ma dall'aspetto della fonte di manage.py, non c'è niente da chiamare, mentre passa argomenti a django.core.management.execute_from_command_line().

Ho provato anche la definizione di una funzione, come mostrato "Running shell command from Python and capturing the output", ma chiamandolo con

runProcess('Python manage.py syncdb') 

restituisce solo:

<generator object runProcess at 0x000000000520D4C8> 

risposta

10

Si potrebbe iniziare una shell Django dalla riga di comando:

python manage.py shell 

Quindi importare execute_from_command_line:

from django.core.management import execute_from_command_line 

E, infine, è possibile eseguire i comandi necessari:

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

Si dovrebbe risolvere il problema.

In alternativa, è anche possibile dare un'occhiata allo subprocess module documentation. È possibile eseguire un processo e verificarne l'output:

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

Funziona, grazie! – TreyENelson

0

Nota: questo è per l'utilizzo interattivo, non qualcosa che è possibile inserire nel codice di produzione.

Se stai usando ipython, si può fare

!python manage.py syncdb 

Il '!' dice:

Voglio eseguire questo come se si tratta di un comando di shell

Se avete pip installato, è possibile ottenere ipython con:

pip install ipython 

che si vorrebbe eseguire alla riga di comando (non nell'interprete Python). Potrebbe essere necessario lanciare un sudo di fronte a questo, a seconda di come è impostato il proprio ambiente.

+0

Questa sarebbe la soluzione ideale, ma dopo aver installato ipython, l'esecuzione di '! Python manage.py syncdb' dalla shell python restituisce un errore di sintassi su'! ', Prima e dopo l'importazione di IPython. – TreyENelson

+0

stai iniziando la shell python con 'python' ancora? Vorresti usare 'ipython'. La shell ipython funziona proprio come la shell Python, ma con alcune funzionalità aggiunte, come la '!'. – bgschiller

+0

Ah, ha senso, ma in realtà non risolve il problema originale, dal momento che werkzeug utilizza la normale shell Python. (A meno che non manchi qualche impostazione che ti permetta di specificare di usare la shell ipython) – TreyENelson

Problemi correlati