Saltar al contenido

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

Solución:

los << parte está mal, usa < en lugar de:

$ ./manage.py shell < myscript.py

También puedes hacer:

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

Para python3 necesitarías usar

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

No se recomienda hacer eso desde el shell – y esto tiene la intención de que no debería ejecutar scripts aleatorios desde el entorno de django (pero no están 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, cree 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 sea el nombre del comando desde el que desea ejecutar ./manage.py)

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(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 investigar un poco, encontré esta respuesta de Stack Overflow: https://stackoverflow.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, estaba obteniendo un django.core.exceptions.AppRegistryNoReady error.

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *