script run programa ejecutar desde cómo consola comandos archivo python django django-shell

run - ¿Cómo ejecutar un script de Python desde el shell de Django?



ejecutar.py desde consola python (14)

Necesito ejecutar un script de Python desde el shell de Django. Lo intenté:

./manage.py shell << my_script.py

Pero no funcionó. Solo estaba esperando que escribiera algo.


@AtulVarma proporcionó un comentario muy útil en la respuesta aceptada que no funciona:

echo ''import myscript'' | python manage.py shell



Como otras respuestas indican, pero no indican explícitamente, lo que realmente puede necesitar no es necesariamente ejecutar su script desde el shell de Django, sino acceder a sus aplicaciones sin usar el shell de 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, responde aquí - Script Django para acceder a objetos modelo sin usar el shell manage.py - o búsquedas similares pueden ayudarlo.

Tenía que comenzar my_command.py con

import os,sys sys.path.append(''/path/to/myproject'') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file") import django django.setup() import project.app.models #do things with my models, yay

y luego ejecuté python3 my_command.py

(Django 2.0.2)


La parte << es incorrecta, use < lugar:

$ ./manage.py shell < myscript.py

También podrías hacer:

$ ./manage.py shell ... >>> execfile(''myscript.py'')

Para python3 necesitarías usar

>>> exec(open(''myscript.py'').read())


Llego tarde a la fiesta, pero espero que mi respuesta ayude a alguien: puedes hacer esto en tu script de Python:

import sys, os sys.path.append(''/path/to/your/django/app'') os.environ[''DJANGO_SETTINGS_MODULE''] = ''settings'' from django.conf import settings

el resto de tus cosas van aquí ...


No se recomienda hacer eso desde el shell , y esto es así porque no debería estar ejecutando scripts al azar desde el entorno de django (pero hay formas de evitar esto, vea las otras respuestas).

Si se trata de un script que ejecutará varias veces, es una buena idea configurarlo como un comando personalizado, es decir,

$ ./manage.py my_command

para hacer esto, crea un archivo en un subdirectorio de management y commands de tu app , es decir,

my_app/ __init__.py models.py management/ __init__.py commands/ __init__.py my_command.py tests.py views.py

y en este archivo defina su comando personalizado (asegurándose de que el nombre del archivo es el nombre del comando que desea ejecutar desde ./manage.py )

from django.core.management.base import BaseCommand class Command(BaseCommand): def handle_noargs(self, **options): # now do the things that you want with your models here


Para cualquiera que use Django 1.7+, parece que simplemente importar el módulo de configuración no es suficiente.

Después de excavar, encontré esta respuesta de : https://.com/a/23241093

Ahora necesita:

import os, django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") django.setup() # now your code can go here...

Sin hacer lo anterior, django.core.exceptions.AppRegistryNoReady un error django.core.exceptions.AppRegistryNoReady .

Mi archivo de script está en el mismo directorio que mi proyecto django (es decir, en la misma carpeta que manage.py)


Pruebe esto si está usando un entorno virtual: -

shell python manage.py

para usar esos comandos debes estar dentro del entorno virtual. para este uso: -

workon vir_env_name

por ejemplo :-

dc@dc-comp-4:~/mysite$ workon jango (jango)dc@dc-comp-4:~/mysite$ python manage.py shell Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>

Nota : - Aquí mysite es el nombre de mi sitio web y jango es mi nombre de entorno virtual


Puede ejecutar el script con la variable de entorno DJANGO_SETTINGS_MODULE establecida. Eso es todo lo que se necesita para configurar el entorno Django-shell.

Esto funciona en Django> = 1.4


Si IPython está disponible ( pip install ipython ), el ./manage.py shell usará automáticamente su shell y luego podrá usar el comando mágico %run :

%run my_script.py


django.setup () no parece funcionar.

tampoco parece ser requerido.

esto solo funcionó.

import os, django, glob, sys, shelve os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")


Tenga en cuenta que este método ha quedado obsoleto para las versiones más recientes de django! (> 1.3)

Una respuesta alternativa, puede agregar esto a la parte superior de my_script.py

from django.core.management import setup_environ import settings setup_environ(settings)

y ejecuta my_script.py solo con python en el directorio donde tienes settings.py pero esto es un poco hacky.

$ python my_script.py



import os, sys, django os.environ["DJANGO_SETTINGS_MODULE"] = "settings" sys.path.insert(0, os.getcwd()) django.setup()