2012-07-16 21 views
7

Questa domanda: Automatically import models on Django shell launch contiene le risposte che spiegano come importare i modelli all'avvio utilizzando shell_plus, ma nessuna risposta su come eseguire il codice in generale.Come eseguire codice arbitrario all'avvio della shell di django?

Ma c'è un modo semplice per eseguire uno script Python?

python manage.py shell [or shell_plus] --run=script.py 

Avrebbe semplicemente eseguito lo script come se avessi digitato l'intera cosa all'avvio della shell.

Mi rendo conto che è possibile importare le cose nella shell, ma poi sono bloccate all'interno di uno spazio dei nomi.

Penso che ipython dovrebbe avere un modo per eseguire uno script e quindi importare il suo locals() nello spazio dei nomi di livello superiore. In tal caso potresti semplicemente fare %magic script.py e faremo solo un passo, il che sarebbe positivo.

Cambiare il modo in cui si avvia la shell dovrebbe andare bene: l'obiettivo principale è quello di essere in grado di creare un file eseguito all'avvio della shell.

risposta

1

Non so se c'è una bandiera si può usare, ma se avete ipython installato dovrebbe essere semplice come:

ipython

Poi, quando sei nel prompt:

run script.py

Poi:

run manage.py shell

2

È possibile creare il proprio comando personalizzato proprio come ha fatto shell_plus: vedere il source del comando shell_plus per vedere come. In quel codice è possibile specificare ed eseguire il file che deve essere eseguito prima di avviare la shell. Utile anche la documentazione di Django su creating custom commands.

2

È possibile provare a utilizzare la variabile di ambiente PYTHONSTARTUP. Prova anche django-extensions: django-extensions

Vedere comando django-extensions/management/commands/shell_plus.py.

Dal codice sorgente di questo comando vedo che rispetta la variabile env di PYTHONSTARTUP.

+0

il problema è che non potrei volere che venga eseguito per tutte le shell - io uso ipython per cose diverse da django! e shell_plus carica solo modelli. – fastmultiplication

1

shell_plus utilizza una forma limitata di IPython che non elabora la sua configurazione di avvio &, che sconfigge la maggior parte dei normali tentativi di eseguire le cose all'avvio della shell django + ipython. Puoi cambiarlo per usare la versione completa che risolverà la maggior parte dei problemi.

Modificare django_extensions/management/commands/shell_plus.py

remove:

embed(user_ns=imported_objects) 

e sostituirlo con:

from IPython import start_ipython 
start_ipython(argv=[], user_ns=imported_objects) 

Poi sarà caricato il codice python nelle directory di avvio.

Problemi correlati