2013-04-07 6 views
7

Próbuję użyć Werkzeug w moim projekcie Django, który zasadniczo jest interfejsem powłoki Pythona na stronie internetowej. Chcę uruchamiać polecenia, takie jak python manage.py syncdb i python manage.py migrate, ale w powłoce Pythona nie jest to bardzo proste.Jak wykonać manage.py z powłoki Python

Próbowałem import manage i próbowałem od tego polecenia, ale z wyglądu źródła manage.py nie ma nic do połączenia, ponieważ przekazuje argumenty do django.core.management.execute_from_command_line().

Próbowałem też definiowanie funkcji, jak pokazano "Running shell command from Python and capturing the output", ale nazywając ją przy użyciu tylko

runProcess('Python manage.py syncdb') 

Powroty:

<generator object runProcess at 0x000000000520D4C8> 

Odpowiedz

10

Można zacząć powłoki Django z wiersza poleceń:

python manage.py shell 

Następnie importuj execute_from_command_line:

from django.core.management import execute_from_command_line 

I wreszcie, można wykonać komendy potrzebne:

execute_from_command_line(["manage.py", "syncdb"]) 

To powinno rozwiązać problem.

Alternatywnie można również spojrzeć na subprocess module documentation. Można wykonać proces, a następnie sprawdzić jego wydajność:

import subprocess 
output = subprocess.check_output(["python", "manage.py", "syncdb"]) 
for line in output.split('\n'): 
    # do something with line 
+0

To działa, dziękuję! – TreyENelson

0

Uwaga: jest to użycie interaktywne, a nie coś, co można umieścić w kodzie produkcyjnym.

Jeśli używasz ipython można zrobić

!python manage.py syncdb 

The '!' mówi:

chcę wykonać to tak, jakby to polecenie powłoki

Jeśli pip zainstalowany, można uzyskać ipython z:

pip install ipython 

które chcesz uruchom w wierszu poleceń (nie w interpretera Pythona). Może być konieczne wyrzucenie przed nią sudo, w zależności od konfiguracji środowiska.

+0

To byłoby idealne rozwiązanie, ale po zainstalowaniu ipython, uruchomienie '! Python manage.py syncdb' z powłoki python zwróci błąd składni na'! ', Przed i po zaimportowaniu IPythona. – TreyENelson

+0

uruchamiasz powłokę Pythona z pythonem? Będziesz chciał użyć 'ipython'. Powłoka ipython działa tak jak powłoka Pythona, ale z kilkoma dodanymi funkcjami, takimi jak "!". – bgschiller

+0

Ah, ma sens, ale tak naprawdę nie rozwiązuje pierwotnego problemu, ponieważ werkzeug używa normalnej powłoki Pythona. (O ile nie ma jakiegoś ustawienia, które mi umknęło, pozwala ci określić użycie powłoki ipython) – TreyENelson

Powiązane problemy