2012-07-16 8 views
7

यह प्रश्न: Automatically import models on Django shell launch में जवाब है कि shell_plus का उपयोग करके प्रारंभ करने पर मॉडल कैसे आयात करें, लेकिन सामान्य रूप से कोड को चलाने के तरीके के बारे में कोई जवाब नहीं है।django खोल शुरू होने पर मनमानी कोड कैसे चलाएं?

लेकिन क्या एक पाइथन स्क्रिप्ट चलाने का कोई आसान तरीका है?

python manage.py shell [or shell_plus] --run=script.py 

सिर्फ स्क्रिप्ट चलाएगा जैसे कि आप पूरी चीज को खोलने के रूप में टाइप करेंगे।

मुझे एहसास है कि आप खोल में चीजें आयात कर सकते हैं, लेकिन फिर वे नामस्थान में फंस गए हैं।

मुझे लगता है कि ipython को स्क्रिप्ट चलाने का कोई तरीका होना चाहिए, और उसके बाद locals() को अपूर्ण नामस्थान में आयात करें। उस स्थिति में आप केवल %magic script.py कर सकते हैं और हम केवल एक चरण तक नीचे आ जाएंगे, जो अच्छा होगा।

खोल शुरू करने के तरीके को बदलना ठीक होना चाहिए - मुख्य लक्ष्य केवल खोल बनाने के लिए चलने वाली फ़ाइल बनाने में सक्षम होना चाहिए।

उत्तर

1

सुनिश्चित नहीं हैं कि वहाँ एक ध्वज का उपयोग कर सकते है, लेकिन IPython स्थापित यदि आपके पास है सरल होना चाहिए अगर के रूप में:

ipython

फिर जब आप संकेत में कर रहे हैं:

run script.py

फिर

:

run manage.py shell

2

आप shell_plus की तरह अपना खुद का कस्टम कमांड बना सकते हैं: shell_plus कमांड के source को देखने के लिए देखें। उस कोड में आप खोल को शुरू करने से पहले फ़ाइल को निर्दिष्ट और चला सकते हैं जिसे निष्पादित करने की आवश्यकता है। Django के प्रलेखन creating custom commands पर भी उपयोगी है।

2

आप पर्यावरण परिवर्तनीय PYTHONSTARTUP का उपयोग करने का प्रयास कर सकते हैं। डीजेंगो-एक्सटेंशन का भी प्रयास करें: django-extensions

django-एक्सटेंशन/प्रबंधन/आदेश/shell_plus.py कमांड देखें।

इस कमांड के स्रोत कोड से मुझे लगता है कि यह PYTHONSTARTUP env चर का सम्मान करता है।

+0

समस्या यह है कि मैं इसे सभी गोले के लिए चलाने के लिए नहीं चाहूंगा - मैं django के अलावा अन्य चीज़ों के लिए ipython का उपयोग करता हूं! और shell_plus केवल मॉडल लोड करता है। – fastmultiplication

1

shell_plus आईपीथॉन का सीमित रूप उपयोग करता है जो इसकी स्टार्टअप & कॉन्फ़िगरेशन को संसाधित नहीं करता है, जो django + ipython shell स्टार्टअप पर चीजों को चलाने के लिए सबसे सामान्य प्रयासों को हरा देता है। आप इसे पूर्ण संस्करण का उपयोग करने के लिए स्विच कर सकते हैं जो अधिकतर समस्याओं को हल करेगा।

django_extensions/management/command/shell_plus संशोधित करें।py

निकालें:

embed(user_ns=imported_objects) 

और साथ बदलें:

from IPython import start_ipython 
start_ipython(argv=[], user_ns=imported_objects) 

फिर स्टार्टअप निर्देशिका में अपने अजगर कोड लोड किया जाएगा।