Necesito ejecutar un script Python desde el shell Django. Lo intenté:
./manage.py shell << my_script.py
Pero no funcionó. Solo estaba esperando que yo escribiera algo.
python
django
django-shell
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
fuente

djangofunciona, ¿qué es lo que realmente quieres hacer?my_script.pycontiene algunas operaciones en uno de mis modelos de Django. Ya hice esto antes pero no recuerdo exactamente cómo.Respuestas:
La
<<parte está mal, use<en su lugar:También puedes hacer:
Para python3 necesitarías usar
fuente
./manage.py shell <<EOF\ execfile('myscript.py') \EOFecho 'import myscript' | python manage.py shell. He descubierto que esto puede ser útil para scripts rápidos y sucios que solo necesita ejecutar una vez, sin tener que pasar por el engorroso proceso de crear unmanage.pycomando.Get-Content myscript.py | .\manage.py shellUsted no está recomendada de hacer que desde el
shell- y ello se pretende, ya que no realmente debería estar ejecutando scripts de azar desde el entorno Django (pero no son formas de evitar esto, ver las otras respuestas).Si se trata de un script que ejecutará varias veces, es una buena idea configurarlo como un comando personalizado, es decir
para hacer esto crea un archivo en un subdirectorio de
managementycommandsde tuapp, es deciry en este archivo defina su comando personalizado (asegurándose de que el nombre del archivo sea el nombre del comando desde el que desea ejecutar
./manage.py)fuente
NoArgsCommandestá en desuso. Esta página ofrece un ejemplo de trabajo: docs.djangoproject.com/en/1.9/howto/custom-management-commands/…def handle_noargs(self, **options):adef handle(self, **options):.def handle(self, **options):como el comentario de James.Para cualquiera que use Django 1.7+, parece que simplemente importar el módulo de configuración no es suficiente.
Después de investigar un poco, encontré esta respuesta de desbordamiento de pila: https://stackoverflow.com/a/23241093
Ahora necesita:
Sin hacer lo anterior, recibí un
django.core.exceptions.AppRegistryNoReadyerror.Mi archivo de script está en el mismo directorio que mi proyecto django (es decir, en la misma carpeta que manage.py)
fuente
DJANGO_SETTINGS_MODULEvariable de entorno. Con eso fue suficiente para solo:import django ; django.setup()menos de 1.7.django.setup()no permitirá que el script acceda a los modelos de Django, ¡ni siquiera los importará!import django; django.setup().Llego tarde a la fiesta, pero espero que mi respuesta ayude a alguien: puede hacer esto en su script de Python:
el resto de tus cosas va aquí ...
fuente
sys.path.appendcosas siempre que lo hagaDJANGO_SETTINGS_MODULEScorrectamente (por ejemplo, si tiene un script sentado justo encima de la raíz de su sitio, puede hacerloos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings').sys.path.append(os.getcwd()), funciona cuando estoy dentro del directorio de mi proyecto, mi DJANGO_SETTINGS_MODULE es correcto e intento ejecutar un script que importe modelos, vistas, etc.runscriptde django-extensionesUna muestra
script.pypara probarlo:Mencionado en: http://django-extensions.readthedocs.io/en/latest/command_extensions.html y documentado en:
También hay un tutorial .
Probado en Django 1.9.6, django-extensions 1.6.7.
fuente
django-extensions(debería). Nota: Parece querunscriptusa el django estándarshell. Sería fantástico si se usarashell_plus(también en extensiones) para que no tuviera que importar todo para scripts simples.Si IPython está disponible (
pip install ipython),./manage.py shellusará automáticamente su shell y luego podrá usar el comando mágico%run:fuente
runscriptque funciona con scripts fuera del proyecto / paquete y no se queja asíTypeError: the 'package' argument is required to perform a relative import forSimplemente puede ejecutar el script con el
DJANGO_SETTINGS_MODULEconjunto de variables de entorno. Eso es todo lo que se necesita para configurar el entorno Django-shell.Esto funciona en Django> = 1.4
fuente
@AtulVarma proporcionó un comentario muy útil bajo la respuesta aceptada que no funciona :
fuente
si no tiene muchos comandos en su script, úselo:
Django docs
fuente
Como otras respuestas indican pero no indican explícitamente, lo que realmente puede necesitar no es necesariamente ejecutar su script desde el shell Django, sino acceder a sus aplicaciones sin usar el shell Django .
Esto difiere mucho de la versión de Django a la versión de Django. Si no encuentra su solución en este hilo, responda aquí ( script de Django para acceder a los objetos del modelo sin utilizar el shell manage.py ) o búsquedas similares pueden ayudarlo.
Tenía que comenzar my_command.py con
y luego corrió
python3 my_command.py(Django 2.0.2)
fuente
sys.path.append('/path/to/myproject')conBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))y `sys.path.append (BASE_DIR)`. ¡Además, no olvide activar su entorno virtual antes de ejecutar el comando!fuente
¡Tenga en cuenta que este método ha quedado en desuso para versiones más recientes de django! (> 1.3)
Una respuesta alternativa, podría agregar esto al principio de
my_script.pyy ejecuta
my_script.pysolo con python en el directorio donde tienessettings.pypero esto es un poco hacky.fuente
Si quieres correr en BG aún mejor:
La salida estará en
nohup.outfuente
Algo que acabo de encontrar interesante es Django Scripts, que le permite escribir scripts para ejecutarlos con python manage.py runscript foobar. Puede encontrar información más detallada sobre implementación y escrutinio aquí, http://django-extensions.readthedocs.org/en/latest/index.html
fuente
Pruebe esto si está utilizando un entorno virtual: -
para usar esos comandos debes estar dentro del entorno virtual. para este uso: -
por ejemplo :-
Nota : - aquí mysite es el nombre de mi sitio web y jango es mi nombre de entorno virtual
fuente
Vine aquí con la misma pregunta que el OP, y encontré mi respuesta favorita precisamente en el error dentro de la pregunta, que también funciona en Python 3:
fuente
Otra forma es ejecutar este:
Esto está funcionando en Python2.7 y Django1.9
fuente
Si desea ejecutar un script de inicio (por ejemplo, importe algunos modelos de django para trabajar con ellos de forma interactiva) y permanezca en el shell de django:
fuente
El shell django es la buena manera de ejecutar un módulo de Python con el entorno django, pero no siempre es fácil y cansado importar módulos y ejecutar funciones manualmente, especialmente sin autocompletar. Para resolver esto, creé un pequeño script de shell "runscript.sh" que le permite aprovechar al máximo la finalización automática y el historial de registro de la consola de Linux.
NB: Copie runscript.sh al proyecto raíz y configure la ejecución correcta (chmod + x)
Por ejemplo: quiero ejecutar la función de Python llamada show (a, b, c) en el módulo do_somethings.py en myapp / do_folder /
La forma estándar de django (manage.py shell):
Con script (runcript.sh):
El guión no está limitado en número de argumentos. Sin embargo, solo se admiten argumentos de tipos primitivos (int, float, string)
fuente
runscriptdesde eldjango-extensionspaquete haga lo mismo, compruébelo django-extensions.readthedocs.io/en/latest/runscript.htmlTarde a la fiesta. Pero esto podría ser útil para alguien.
Todo lo que necesitas es tu script e
django-extensionsinstalado.Simplemente ejecute el
shell_plusdisponibledjango_extensionse importe el script que ha escrito.Si su script está
scpt.pyy está dentro de una carpetafol, puede ejecutar el script de la siguiente manera.e importa tu script dentro del shell de la siguiente manera.
fuente
django.setup () no parece funcionar.
tampoco parece ser necesario.
esto solo funcionó.
fuente