2012-07-16 19 views
7

Esta pregunta: Automatically import models on Django shell launch tiene respuestas que explican cómo importar modelos al inicio usando shell_plus, pero no hay respuesta sobre cómo ejecutar el código en general.¿Cómo ejecutar código arbitrario cuando se inicia django shell?

¿Pero hay una forma sencilla de ejecutar un script de Python?

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

Simplemente ejecute la secuencia de comandos como si hubiera escrito todo en el inicio de la shell.

Me doy cuenta de que puede importar cosas en el shell, pero luego están atrapadas dentro de un espacio de nombres.

Creo que ipython debería tener una forma de ejecutar un script, y luego importar su locals() en el espacio de nombres de nivel superior. En ese caso, podría simplemente hacer %magic script.py y estaríamos solo en un paso, lo que estaría bien.

Cambiar la forma de iniciar el shell debería estar bien; el objetivo principal es simplemente poder crear un archivo que se ejecute al iniciar el shell.

Respuesta

1

No estoy seguro si hay un indicador que puede utilizar, pero si usted tiene ipython instalado debe ser tan simple como:

ipython

Luego, cuando estás en el símbolo:

run script.py

continuación:

run manage.py shell

2

Puede crear su propio comando personalizado como lo hizo shell_plus: vea el source del comando shell_plus para ver cómo. En ese código, puede especificar y ejecutar el archivo que debe ejecutarse antes de iniciar el shell. También es útil la documentación de Django en creating custom commands.

2

Puede intentar utilizar la variable de entorno PYTHONSTARTUP. Pruebe también django-extensions: django-extensions

Consulte el comando django-extensions/management/commands/shell_plus.py.

Desde el código fuente de este comando, veo que respeta la variable env PYTHONSTARTUP.

+0

el problema es que no me gustaría que se ejecutara para todas las shells. ¡Utilizo ipython para cosas que no sean django! y shell_plus solo carga modelos. – fastmultiplication

1

shell_plus usa una forma limitada de IPython que no procesa su configuración de inicio &, que derrota la mayoría de los intentos normales de ejecutar cosas en el inicio del shell django + ipython. Puede cambiarlo para usar la versión completa que resolverá la mayoría de los problemas.

Modificar django_extensions/management/commands/shell_plus.py

remove:

embed(user_ns=imported_objects) 

y sustituirla por:

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

A continuación, se cargará el código Python en los directorios de inicio.

Cuestiones relacionadas