मुझे Django शेल से पायथन स्क्रिप्ट निष्पादित करने की आवश्यकता है। मैंने कोशिश की:
./manage.py shell << my_script.py
लेकिन यह काम नहीं किया। बस मुझे कुछ लिखने का इंतजार था।
मुझे Django शेल से पायथन स्क्रिप्ट निष्पादित करने की आवश्यकता है। मैंने कोशिश की:
./manage.py shell << my_script.py
लेकिन यह काम नहीं किया। बस मुझे कुछ लिखने का इंतजार था।
जवाबों:
<<
भाग गलत है, का उपयोग <
करने के बजाय:
$ ./manage.py shell < myscript.py
आप भी कर सकते हैं:
$ ./manage.py shell
...
>>> execfile('myscript.py')
Python3 के लिए आपको उपयोग करने की आवश्यकता होगी
>>> exec(open('myscript.py').read())
./manage.py shell <<EOF\ execfile('myscript.py') \EOF
echo 'import myscript' | python manage.py shell
। मैंने पाया है कि यह त्वरित-और गंदी लिपियों के लिए उपयोगी हो सकता है जिन्हें आपको केवल एक बार चलाने की आवश्यकता होती है, बिना manage.py
कमांड बनाने की बोझिल प्रक्रिया के माध्यम से जाने के लिए ।
Get-Content myscript.py | .\manage.py shell
आपको ऐसा करने की अनुशंसा नहीं की गई है shell
- और इसका उद्देश्य यह है कि आप वास्तव में django परिवेश से यादृच्छिक स्क्रिप्ट निष्पादित नहीं कर रहे हैं (लेकिन इसके चारों ओर तरीके हैं, अन्य उत्तर देखें)।
इस एक स्क्रिप्ट है कि आप कई बार चल रहा है हो जाएगा, तो यह एक अच्छा विचार एक के रूप में सेट अप करने के लिए कस्टम आदेश यानी
$ ./manage.py my_command
यह करने के लिए की एक subdir में एक फ़ाइल बनाने management
और commands
अपने की app
, यानी
my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
और इस फ़ाइल में अपने कस्टम कमांड को परिभाषित करें (यह सुनिश्चित करना कि फ़ाइल का नाम उस कमांड का नाम है जिसे आप निष्पादित करना चाहते हैं ./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
NoArgsCommand
को पदावनत किया गया है। यह पृष्ठ एक कार्यशील उदाहरण देता है: docs.djangoproject.com/en/1.9/howto/custom-management-commands/…
def handle_noargs(self, **options):
के लिए def handle(self, **options):
।
def handle(self, **options):
जेम्स की टिप्पणी के रूप में परिवर्तन के लिए इसे प्राप्त करने के लिए ।
Django 1.7+ का उपयोग करने वाले किसी के लिए, ऐसा लगता है कि बस सेटिंग्स मॉड्यूल आयात करना पर्याप्त नहीं है।
कुछ खुदाई के बाद, मुझे यह ढेर अतिप्रवाह उत्तर मिला: https://stackoverflow.com/a/23241093
अब आपको निम्न करने की आवश्यकता है:
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
# now your code can go here...
ऊपर किए बिना, मैं एक हो रहा था django.core.exceptions.AppRegistryNoReady
त्रुटि ।
मेरी स्क्रिप्ट फ़ाइल मेरे django प्रोजेक्ट के समान निर्देशिका में है (जैसे कि प्रबंधन के समान फ़ोल्डर में।)
DJANGO_SETTINGS_MODULE
पर्यावरण चर में पहले से संदर्भित सेटिंग्स फ़ाइल है । इसके साथ यह सिर्फ 1 के लिए पर्याप्त था: import django ; django.setup()
1.7 के तहत।
django.setup()
है स्क्रिप्ट को Django मॉडल का उपयोग नहीं करने देगा, उन्हें आयात भी नहीं करेगा!
import django; django.setup()
।
मुझे पार्टी के लिए देर हो रही है लेकिन मुझे उम्मीद है कि मेरी प्रतिक्रिया से किसी को मदद मिलेगी: आप इसे अपनी पायथन स्क्रिप्ट में कर सकते हैं:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
आपका बाकी सामान यहां चला जाता है ...।
sys.path.append
सामान को तब तक छोड़ सकते हैं जब तक आप DJANGO_SETTINGS_MODULES
सही हो जाते हैं (जैसे यदि आपके पास आपकी साइट के ऊपर एक स्क्रिप्ट बैठी है जो आप कर सकते हैं os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
)।
sys.path.append(os.getcwd())
, यह तब काम करता है जब मैं अपनी परियोजना निर्देशिका के अंदर होता हूं, मेरा DJANGO_SETTINGS_MODULE सही है और मैं एक स्क्रिप्ट चलाने की कोशिश करता हूं जो मॉडल, दृश्य आदि आयात करता है
runscript
से Django-एक्सटेंशन
python manage.py runscript scripty.py
script.py
इसका परीक्षण करने के लिए एक नमूना :
from django.contrib.auth.models import User
print(User.objects.values())
इस पर उल्लेख किया गया: http://django-extensions.readthedocs.io/en/latest/command_extensions.html और इस पर प्रलेखित:
python manage.py runscript --help
Django 1.9.6 पर परीक्षण किया गया, django- एक्सटेंशन 1.6.7।
django-extensions
(आपको चाहिए)। नोट: ऐसा लगता है runscript
कि मानक django का उपयोग करता है shell
। यह शानदार होगा यदि यह shell_plus
(एक्सटेंशन में भी) का उपयोग करता है तो आपको सरल स्क्रिप्ट के लिए सब कुछ आयात करने की आवश्यकता नहीं थी।
यदि IPython उपलब्ध है ( pip install ipython
) तो ./manage.py shell
स्वचालित रूप से शेल का उपयोग करेगा और फिर आप मैजिक कमांड का उपयोग कर सकते हैं %run
:
%run my_script.py
runscript
कि यह प्रोजेक्ट / पैकेज के बाहर स्क्रिप्ट के साथ काम करता है और इस तरह की शिकायत नहीं करता हैTypeError: the 'package' argument is required to perform a relative import for
आप स्क्रिप्ट को DJANGO_SETTINGS_MODULE
पर्यावरण चर सेट के साथ चला सकते हैं । यह सब Django खोल पर्यावरण स्थापित करने के लिए लेता है।
यह Django> = 1.4 में काम करता है
@AtulVarma ने काम नहीं किए गए स्वीकृत उत्तर के तहत बहुत उपयोगी टिप्पणी प्रदान की :
echo 'import myscript' | python manage.py shell
यदि आपकी स्क्रिप्ट में बहुत सारी कमांड नहीं हैं, तो इसका उपयोग करें:
manage.py shell --command="import django; print(django.__version__)"
जैसा कि अन्य उत्तर इंगित करते हैं, लेकिन स्पष्ट रूप से नहीं बताते हैं, जो आपको वास्तव में आवश्यकता हो सकती है वह जरूरी नहीं है कि आप अपनी स्क्रिप्ट को Django शेल से निष्पादित करें, लेकिन अपने ऐप्स को Django शेल का उपयोग किए बिना एक्सेस करने के लिए ।
यह Django संस्करण के लिए एक बहुत Django संस्करण अलग है। यदि आप इस थ्रेड पर अपना समाधान नहीं ढूंढते हैं, तो यहां जवाब दें - Django स्क्रिप्ट प्रबंधन वस्तुओं का उपयोग किए बिना मॉडल ऑब्जेक्ट तक पहुंचने के लिए - या इसी तरह की खोजों से आपको मदद मिल सकती है।
मुझे my_command.py के साथ शुरुआत करनी थी
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
और फिर भाग गया python3 my_command.py
(Django 2.0.2)
sys.path.append('/path/to/myproject')
साथ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
और `sys.path.append (BASE_DIR)`। कमांड को निष्पादित करने से पहले अपने वर्चुअल एनवी को सक्रिय करना न भूलें!
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
django.setup()
ध्यान दें, इस विधि को django के अधिक हाल के संस्करणों के लिए पदावनत किया गया है! (> 1.3)
एक वैकल्पिक उत्तर, आप इसे सबसे ऊपर जोड़ सकते हैं my_script.py
from django.core.management import setup_environ
import settings
setup_environ(settings)
और my_script.py
उस निर्देशिका में अजगर के साथ निष्पादित करें जहां आपके पास है settings.py
लेकिन यह थोड़ा हैकरी है।
$ python my_script.py
जो कुछ मुझे अभी दिलचस्प लगा वह है Django लिपियों, जो आपको स्क्रिप्ट लिखने के लिए python के साथ चलने के लिए प्रबंधित करता है। कार्यान्वयन और फ्रैक्चर के बारे में अधिक विस्तृत जानकारी यहां पाई जा सकती है, http://django-extensions.readthedocs.org/en/latest/index.html
यदि आप आभासी वातावरण का उपयोग कर रहे हैं, तो यह कोशिश करें: -
अजगर प्रबंधन शेल्फ़
उन आदेशों का उपयोग करने के लिए आपको आभासी वातावरण के अंदर होना चाहिए। इस उपयोग के लिए: -
वर्कऑन vir_env_name
उदाहरण के लिए :-
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)
>>>
नोट : - यहाँ mysite मेरी वेबसाइट का नाम है और jango मेरा वर्चुअल एनवायरमेंट नाम है
इसे निष्पादित करने का अन्य तरीका:
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
यह Python2.7 और Django1.9 पर काम कर रहा है
Django शेल, django पर्यावरण के साथ एक अजगर मॉड्यूल को निष्पादित करने का एक अच्छा तरीका है, लेकिन मॉड्यूल को आयात करना और विशेष रूप से ऑटो-पूर्ण किए बिना मैन्युअल रूप से फ़ंक्शन निष्पादित करना हमेशा आसान और थकाऊ नहीं होता है। इसे हल करने के लिए, मैंने एक छोटी सी शेल स्क्रिप्ट "रनस्क्रिप्ट.श" बनाई जो आपको ऑटो-पूर्णता और लिनक्स कंसोल के लॉग इतिहास का पूरा लाभ उठाने की अनुमति देती है।
NB: रूट परियोजना के लिए copycript.sh कॉपी करें और निष्पादन को सही सेट करें (chmod + x)
उदाहरण के लिए: मैं myapp / do_folder / में मॉड्यूल do_somethings.py में शो (a, b, c) नाम का पायथन फ़ंक्शन चलाना चाहता हूं।
मानक django तरीका (प्रबंधन शेल):
python3 manage.py shell
> from myapp.do_folder import do_somethings
> do_somethings.show("p1", "p2" , 3.14159)
स्क्रिप्ट के साथ (चलाता)
./runscript.sh myapp/do_folder/do_somethings.py show p1 p2 3.14159
तर्कों की संख्या में लिपि सीमित नहीं है। हालाँकि आदिम प्रकारों के केवल तर्क समर्थित हैं (int, float, string)
runscript
से django-extensions
पैकेज एक ही है, जाँच करते हैं यह django-extensions.readthedocs.io/en/latest/runscript.html
पार्टी के लिए देर से। लेकिन यह किसी के लिए मददगार हो सकता है।
बस आपको अपनी स्क्रिप्ट और चाहिए django-extensions
स्थापित है।
बस shell_plus
उपलब्ध में चलाएंdjango_extensions
स्क्रिप्ट को और आपके द्वारा लिखी गई स्क्रिप्ट को आयात करें।
यदि आपकी स्क्रिप्ट है scpt.py
और यह एक फ़ोल्डर के अंदर है, fol
तो आप स्क्रिप्ट को निम्नानुसार चला सकते हैं।
python manage.py shell_plus
और केवल शेल के अंदर अपनी स्क्रिप्ट को निम्नानुसार आयात करें।
>>> from fol import scpt
django.setup () काम नहीं करता है।
यह आवश्यक प्रतीत नहीं होता है।
यह अकेले काम किया।
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
django
काम करता है, आप वास्तव में क्या करना चाहते हैं?