জ্যাঙ্গো শেল থেকে আমার একটি পাইথন স্ক্রিপ্ট চালানো দরকার। আমি চেষ্টা করেছিলাম:
./manage.py shell << my_script.py
তবে এটি কার্যকর হয়নি। এটি আমার জন্য কিছু লিখার অপেক্ষা করছিল।
জ্যাঙ্গো শেল থেকে আমার একটি পাইথন স্ক্রিপ্ট চালানো দরকার। আমি চেষ্টা করেছিলাম:
./manage.py shell << my_script.py
তবে এটি কার্যকর হয়নি। এটি আমার জন্য কিছু লিখার অপেক্ষা করছিল।
উত্তর:
<<অংশ ভুল, ব্যবহার <পরিবর্তে:
$ ./manage.py shell < myscript.py
আপনি এছাড়াও করতে পারেন:
$ ./manage.py shell
...
>>> execfile('myscript.py')
পাইথন 3 এর জন্য আপনাকে ব্যবহার করতে হবে
>>> 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- এবং এটি উদ্দেশ্য হিসাবে আপনি জ্যাঙ্গো পরিবেশ থেকে এলোমেলো স্ক্রিপ্টগুলি বাস্তবায়ন করা উচিত নয় (তবে এটির বিভিন্ন উপায় রয়েছে, অন্যান্য উত্তরগুলি দেখুন)।
এই একটি স্ক্রিপ্ট যে আপনার একাধিক বার চলমান করা হবে হয়, তাহলে এটি একটি ভাল ধারণা হিসেবে এটি সেট আপ করতে এর কাস্টম কমান্ড অর্থাত
$ ./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করা হয়েছে। এই পৃষ্ঠাটি একটি কার্যকরী উদাহরণ দেয়: ডকস.ডজ্যাঙ্গোপ্রজেক্ট /en/1.9/howto/custom-management-commands/…
def handle_noargs(self, **options):হওয়া দরকার def handle(self, **options):।
def handle(self, **options):জেমসের মন্তব্য হিসাবে পরিবর্তন করতে কাজ পেতে ।
জ্যাঙ্গো ১.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_SETTINGS_MODULEপরিবেশে পরিবর্তনশীল হিসাবে উল্লেখ করা আছে । এটি কেবলমাত্র যথেষ্ট ছিল: import django ; django.setup()1.7 এর নীচে।
django.setup()না করা স্ক্রিপ্টটি জ্যাঙ্গো মডেলগুলিকে অ্যাক্সেস করতে দেবে না, এমনকি তাদের আমদানিও করবে না!
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()), আমি যখন আমার প্রকল্পের ডিরেক্টরিতে থাকি তখন এটি কাজ করে, আমার ডিজেঙ্গো_এসটিটিংসএস_মডুয়েল সঠিক এবং আমি একটি স্ক্রিপ্ট চালানোর চেষ্টা করি যা মডেল, ভিউ, ইত্যাদি আমদানি করে
runscriptথেকে জ্যাঙ্গো এক্সটেনশানসমূহ
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
জ্যাঙ্গো 1.9.6 এ পরীক্ষিত, জাঙ্গো-এক্সটেনশনগুলি 1.6.7।
django-extensions(তবে আপনার উচিত) তবে এটি সেরা উত্তর । দ্রষ্টব্য: দেখে মনে হচ্ছে runscriptএটি স্ট্যান্ডার্ড জ্যাঙ্গো ব্যবহার করে 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এনভায়রনমেন্ট ভেরিয়েবল সেট সহ কেবল স্ক্রিপ্টটি চালাতে পারেন । জ্যাঙ্গো-শেল পরিবেশ স্থাপনে এটিই লাগে।
এটি জাঙ্গো> = 1.4 এ কাজ করে
অ্যাটুলভারমা অ-কার্যকরী স্বীকৃত উত্তরের অধীনে একটি খুব দরকারী মন্তব্য দিয়েছেন :
echo 'import myscript' | python manage.py shell
আপনার স্ক্রিপ্টে যদি খুব বেশি কমান্ড না থাকে তবে এটি ব্যবহার করুন:
manage.py shell --command="import django; print(django.__version__)"
যেমন অন্যান্য উত্তরগুলি ইঙ্গিত করে তবে সুস্পষ্টভাবে বর্ণনা করে না, আপনার যা দরকার তা জাজানো শেল থেকে আপনার স্ক্রিপ্টটি সম্পাদন করা নয়, জ্যাঙ্গো শেলটি ব্যবহার না করেই আপনার অ্যাপ্লিকেশনগুলি অ্যাক্সেস করা উচিত ।
এটি জ্যাঙ্গো সংস্করণে অনেকটা জ্যাঙ্গো সংস্করণকে পৃথক করে। আপনি যদি এই থ্রেডটিতে সমাধান না পান তবে এখানে উত্তর দিন - ম্যানেজ.পি শেল ব্যবহার না করে মডেল অবজেক্টগুলিতে অ্যাক্সেস করার জন্য জ্যাঙ্গো স্ক্রিপ্ট - বা অনুরূপ অনুসন্ধানগুলি আপনাকে সহায়তা করতে পারে।
আমার সাথে আমার_কম্যান্ড.পি শুরু করতে হয়েছিল
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
(জাজানো ২.০.২)
sys.path.append('/path/to/myproject')সাথে প্রতিস্থাপন BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))করেছি` কমান্ডটি কার্যকর করার আগে আপনার ভার্চুয়াল এনভিটি সক্রিয় করতে ভুলবেন না!
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
django.setup()
দ্রষ্টব্য, এই পদ্ধতিটি জাঙ্গোর আরও সাম্প্রতিক সংস্করণের জন্য অবচিত করা হয়েছে! (> ১.৩)
বিকল্প উত্তর, আপনি এটি শীর্ষে যুক্ত করতে পারেন my_script.py
from django.core.management import setup_environ
import settings
setup_environ(settings)
এবং আপনার my_script.pyযে ডিরেক্টরিতে রয়েছে তেমন পাইথন দিয়ে settings.pyচালিত করুন তবে এটি কিছুটা হ্যাকি।
$ python my_script.py
আপনি যদি বিজিতে আরও ভালভাবে চালাতে চান তবে:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
আউটপুট হবে nohup.out
আমার কাছে আকর্ষণীয় কিছু খুঁজে পেয়েছিল তা হ'ল জ্যাঙ্গো স্ক্রিপ্টস, যা আপনাকে স্ক্রিপ্টগুলি পাইথন ম্যানেজ.পি রানস্ক্রিপ্ট ফুবার দিয়ে চালানোর অনুমতি দেয়। বাস্তবায়ন এবং কাঠামো সম্পর্কিত আরও বিশদ তথ্য এখানে পাওয়া যাবে, http://django-extensions.readthedocs.org/en/latest/index.html
আপনি যদি ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করছেন এটি ব্যবহার করে দেখুন: -
পাইথন ম্যানেজ.পি শেল
এই কমান্ডটি ব্যবহার করার জন্য আপনাকে অবশ্যই ভার্চুয়াল এনভায়ারভেন্টের ভিতরে থাকতে হবে। এই ব্যবহারের জন্য: -
workon 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)
>>>
দ্রষ্টব্য : - এখানে মাইসাইট আমার ওয়েবসাইটের নাম এবং জাঙ্গো আমার ভার্চুয়াল পরিবেশের নাম vir
এটি অন্যভাবে চালিত করে:
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
এটি পাইথন 2.7 এবং জ্যাঙ্গো 1.9 এ কাজ করছে
জ্যাঙ্গো শেলটি জ্যাঙ্গো পরিবেশের সাথে অজগর মডিউলটি কার্যকর করার ভাল উপায়, তবে মডিউলগুলি আমদানি করা এবং ম্যানুয়ালি বিশেষত স্বয়ংক্রিয়ভাবে সম্পূর্ণ না হয়ে ফাংশন সম্পাদন করা সহজ এবং ক্লান্তিকর নয়। এটি সমাধানের জন্য, আমি একটি ছোট শেল স্ক্রিপ্ট "রানস্ক্রিপ্ট.শ" তৈরি করেছি যা আপনাকে স্বয়ংক্রিয়তা সমাপ্তি এবং লিনাক্স কনসোলের লগ ইতিহাসের পুরো সুবিধা নিতে দেয়।
এনবি: রুট প্রজেক্টে রানস্ক্রিপ্ট.এসপি অনুলিপি করুন এবং সম্পাদনা ডান সেট করুন (chmod + x)
উদাহরণস্বরূপ: আমি মাইপ / do_folder / মডিউল do_somethings.py এ মডিউল do_somethings.py এ পাইথন ফাংশনটি চালাতে চাই (a, b, c)
স্ট্যান্ডার্ড জ্যাঙ্গো ওয়ে (ম্যানেজ.পি শেল):
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
স্ক্রিপ্টটি আর্গুমেন্টের সংখ্যায় সীমাবদ্ধ নয়। তবে কেবল আদিম ধরণের আর্গুমেন্টগুলি সমর্থিত (ইনট, ফ্লোট, স্ট্রিং)
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কাজ করে না , আপনি আসলে কী করতে চান?