Eu preciso executar um script Python a partir do shell do Django. Eu tentei:
./manage.py shell << my_script.py
Mas não deu certo. Só estava esperando eu escrever algo.
python
django
django-shell
Ciro Santilli adicionou uma nova foto
fonte
fonte
django
funciona, o que você realmente quer fazer?my_script.py
contém algumas operações em um dos meus modelos de Django. Eu já fiz isso antes, mas não me lembro exatamente como.Respostas:
A
<<
peça está errada, use<
:Você também pode fazer:
Para python3, você precisaria usar
fonte
./manage.py shell <<EOF\ execfile('myscript.py') \EOF
echo 'import myscript' | python manage.py shell
. Descobri que isso pode ser útil para scripts rápidos e sujos que você só precisa executar uma vez, sem ter que passar pelo processo complicado de criar ummanage.py
comando.Get-Content myscript.py | .\manage.py shell
Você não está recomendado para fazer isso a partir do
shell
- e este é concebido como você não deve realmente ser a execução de scripts aleatórias do ambiente Django (mas não são maneiras de contornar isso, consulte as outras respostas).Se este for um script que você executará várias vezes, é uma boa ideia configurá-lo como um comando personalizado, ou seja,
Para fazer isso, crie um arquivo em um subdir
management
ecommands
de seuapp
, ou seja,e, nesse arquivo, defina seu comando customizado (assegurando que o nome do arquivo seja o nome do comando que você deseja executar
./manage.py
)fonte
NoArgsCommand
está obsoleto. Esta página fornece um exemplo de trabalho: docs.djangoproject.com/en/1.9/howto/custom-management-commands/…def handle_noargs(self, **options):
paradef handle(self, **options):
.def handle(self, **options):
o comentário de James.Para quem usa o Django 1.7+, parece que simplesmente importar o módulo de configurações não é suficiente.
Após algumas pesquisas, encontrei esta resposta do Stack Overflow: https://stackoverflow.com/a/23241093
Agora você precisa:
Sem fazer o acima, eu estava recebendo um
django.core.exceptions.AppRegistryNoReady
erro.Meu arquivo de script está no mesmo diretório que meu projeto django (ou seja, na mesma pasta que manage.py)
fonte
DJANGO_SETTINGS_MODULE
variável de ambiente. Com isso, bastava:import django ; django.setup()
abaixo de 1,7.django.setup()
não permitirá que o script acesse os modelos do Django, nem os importe!import django; django.setup()
.Estou atrasado para a festa, mas espero que minha resposta ajude alguém: Você pode fazer isso no seu script Python:
o resto das suas coisas vai aqui ....
fonte
sys.path.append
coisas desde que estejaDJANGO_SETTINGS_MODULES
certo (por exemplo, se você tiver um script logo acima da raiz do site, poderá fazê-loos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
).sys.path.append(os.getcwd())
, ele funciona quando estou dentro do meu diretório do projeto, meu DJANGO_SETTINGS_MODULE está correto e eu tento executar um script que importar modelos, visualizações, etc.runscript
de django-extensõesUma amostra
script.py
para testá-lo:Mencionado em: http://django-extensions.readthedocs.io/en/latest/command_extensions.html e documentado em:
Há um tutorial também .
Testado no Django 1.9.6, django-extensions 1.6.7.
fonte
django-extensions
(você deveria). Nota: Parece querunscript
usa o django padrãoshell
. Seria fantástico se fosse usadoshell_plus
(também em extensões) para que você não precisasse importar tudo para scripts simples.Se o IPython estiver disponível (
pip install ipython
), ele./manage.py shell
usará automaticamente seu shell e você poderá usar o comando magic%run
:fonte
runscript
funcionar com scripts fora do projeto / pacote e não se queixar assimTypeError: the 'package' argument is required to perform a relative import for
Você pode simplesmente executar o script com a
DJANGO_SETTINGS_MODULE
variável de ambiente definida. Isso é tudo o que é necessário para configurar o ambiente do Django-shell.Isso funciona no Django> = 1.4
fonte
O @AtulVarma forneceu um comentário muito útil sob a resposta aceita que não funciona :
fonte
Se você não possui muitos comandos em seu script, use-o:
Documentos do Django
fonte
Como outras respostas indicam, mas não explicitamente, o que você realmente precisa não é necessariamente executar seu script a partir do shell do Django, mas acessar seus aplicativos sem usar o shell do Django .
Isso difere muito a versão do Django da versão do Django. Se você não encontrar sua solução nesse segmento, responda aqui - script do Django para acessar objetos de modelo sem usar o shell manage.py - ou pesquisas semelhantes podem ajudá-lo.
Eu tive que começar meu_command.py com
e depois correu
python3 my_command.py
(Django 2.0.2)
fonte
sys.path.append('/path/to/myproject')
porBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
e `sys.path.append (BASE_DIR)`. Também não se esqueça de ativar seu ambiente virtual antes de executar o comando!fonte
Observe que este método foi descontinuado para versões mais recentes do django! (> 1.3)
Uma resposta alternativa, você pode adicioná-lo ao topo da página.
my_script.py
e execute
my_script.py
apenas com python no diretório em que você está,settings.py
mas isso é um pouco hacky.fonte
Se você quiser encontrar o BG ainda melhor:
A saída estará em
nohup.out
fonte
Algo que achei interessante é o Django Scripts, que permite escrever scripts para serem executados com python manage.py runscript foobar. Informações mais detalhadas sobre implementação e estrutura podem ser encontradas aqui, http://django-extensions.readthedocs.org/en/latest/index.html
fonte
Tente isso se você estiver usando um ambiente virtual: -
Para usar esses comandos, você deve estar dentro de um ambiente virtual. para este uso: -
por exemplo :-
Nota : - Aqui mysite é o nome do meu site e jango é o nome do meu ambiente virtual
fonte
veio aqui com a mesma pergunta que o OP, e eu encontrei minha resposta favorita precisamente no erro dentro da pergunta, que também funciona no Python 3:
fonte
Por outro lado, execute este:
Isso está funcionando no Python2.7 e Django1.9
fonte
Se você deseja executar o script de inicialização (por exemplo, importe alguns modelos de django para trabalhar com eles interativamente) e permaneça no shell do django:
fonte
O shell django é a boa maneira de executar um módulo python com o ambiente django, mas nem sempre é fácil e cansativo importar módulos e executar funções manualmente, especialmente sem a conclusão automática. Para resolver isso, criei um pequeno script de shell "runscript.sh" que permite tirar o máximo proveito do preenchimento automático e do histórico de log do console do Linux.
NB: Copie o runscript.sh para o projeto raiz e defina a execução correta (chmod + x)
Por exemplo: desejo executar a função python chamada show (a, b, c) no módulo do_somethings.py em myapp / do_folder /
A maneira padrão do django (shell manage.py):
Com script (runscript.sh):
O script não é limitado em número de argumentos. No entanto, apenas argumentos de tipos primitivos são suportados (int, float, string)
fonte
runscript
dodjango-extensions
pacote faça o mesmo, verifique django-extensions.readthedocs.io/en/latest/runscript.htmlTarde para a festa. Mas isso pode ser útil para alguém.
Tudo que você precisa é o seu script e
django-extensions
instalado.Basta executar o
shell_plus
disponível emdjango_extensions
e importar o script que você escreveu.Se o seu script estiver
scpt.py
dentro de uma pasta,fol
você poderá executá-lo da seguinte maneira.e apenas importe seu script dentro do shell da seguinte maneira.
fonte
O django.setup () parece não funcionar.
também não parece ser necessário.
só isso funcionou.
fonte