জ্যাঙ্গো শেল থেকে পাইথন স্ক্রিপ্ট কীভাবে কার্যকর করা যায়?


247

জ্যাঙ্গো শেল থেকে আমার একটি পাইথন স্ক্রিপ্ট চালানো দরকার। আমি চেষ্টা করেছিলাম:

./manage.py shell << my_script.py

তবে এটি কার্যকর হয়নি। এটি আমার জন্য কিছু লিখার অপেক্ষা করছিল।


এটি কীভাবে djangoকাজ করে না , আপনি আসলে কী করতে চান?
ড্যানোডোনভান

2
my_script.pyআমার জ্যাঙ্গো মডেলের একটিতে কয়েকটি অপারেশন রয়েছে। আমি এর আগেও এটি করেছি তবে ঠিক কীভাবে মনে করতে পারছি না।

উত্তর:


388

<<অংশ ভুল, ব্যবহার <পরিবর্তে:

$ ./manage.py shell < myscript.py

আপনি এছাড়াও করতে পারেন:

$ ./manage.py shell
...
>>> execfile('myscript.py')

পাইথন 3 এর জন্য আপনাকে ব্যবহার করতে হবে

>>> exec(open('myscript.py').read())

17
আমার জন্য, এটি শুধুমাত্র স্ক্রিপ্টের প্রথম লাইনটি কার্যকর করে। একমাত্র কাজ যা উভয় পদ্ধতির সংমিশ্রণ হয়:./manage.py shell <<EOF\ execfile('myscript.py') \EOF
স্টিভ বেনেট

পাইথন 3+ দিয়ে এটি আর কাজ করে না। এটিকে প্রতিস্থাপন করার কোনও ধারণা?
ডেভিড ডি

4
@DavidD। প্রতিস্থাপনটি এখানে
পিটার 2108

11
পাইথন 2.x এবং 3.x উভয়ের জন্য কাজ করতে দেখা যায় এমন আরও একটি সমাধান echo 'import myscript' | python manage.py shell। আমি খুঁজে পেয়েছি এটি দ্রুত এবং নোংরা স্ক্রিপ্টগুলির জন্য দরকারী হতে পারে যা আপনাকে কেবল একবার চালাতে হবে, কোনও manage.pyকমান্ড তৈরির জটিল প্রক্রিয়া ছাড়াই ।
অতুল ভার্মা

1
আপনি যদি উইন্ডোজ পাওয়ার শেলটিতে এটি করছেন: Get-Content myscript.py | .\manage.py shell
আদিত্য বিরয়ুধা

219

আপনার কাছ থেকে এটি করার পরামর্শ দেওয়া হচ্ছে না 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

9
আবার এটিই সেরা উত্তর। যেহেতু জাজানো 1.8 অবমূল্যায়ন NoArgsCommandকরা হয়েছে। এই পৃষ্ঠাটি একটি কার্যকরী উদাহরণ দেয়: ডকস.ডজ্যাঙ্গোপ্রজেক্ট /en/1.9/howto/custom-management-commands/…
গের

2
পূর্ববর্তী মতামত অনুসারে, এটি আমার পক্ষে কাজ করার জন্য আমাকে পরিবর্তিত def handle_noargs(self, **options):হওয়া দরকার def handle(self, **options):
জেমস

জবর লিংক এখানে সমর্থনে এই উত্তর এবং ডকুমেন্টেশন করতে।
মাতিয়া পাত্তরনা

1
এটি def handle(self, **options):জেমসের মন্তব্য হিসাবে পরিবর্তন করতে কাজ পেতে ।
ওমর গনজালেস 13

মার্জিত উত্তর। অনেক অনেক ধন্যবাদ
Tessaracter

103

জ্যাঙ্গো ১.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ত্রুটি পাচ্ছিলাম ।

আমার স্ক্রিপ্ট ফাইলটি আমার জ্যাঙ্গো প্রকল্পের মতো একই ডিরেক্টরিতে রয়েছে (যেমন।


2
আমার সেটআপটিতে সেটিংস ফাইলটি ইতিমধ্যে DJANGO_SETTINGS_MODULEপরিবেশে পরিবর্তনশীল হিসাবে উল্লেখ করা আছে । এটি কেবলমাত্র যথেষ্ট ছিল: import django ; django.setup()1.7 এর নীচে।
টেলর এডমিস্টন

1
জাঙ্গো 1.7+ সহ এটি গ্রহণযোগ্য উত্তর হওয়া উচিত :)
এসিডজঙ্ক

এটি স্পষ্টতই জ্যাঙ্গো 1.9.x এর সঠিক উত্তর। চালনা django.setup()না করা স্ক্রিপ্টটি জ্যাঙ্গো মডেলগুলিকে অ্যাক্সেস করতে দেবে না, এমনকি তাদের আমদানিও করবে না!
glarrain

একটি ভার্চুয়ালনেভ আপনি সহজভাবে করতে পারেন import django; django.setup()
ব্যবহারকারী 3759685

1
আপনি আমার দিন তৈরি! এই পোস্টের জন্য ধন্যবাদ। ডি: আমি সেলারি উপর creazy পেয়ে ছিল কারণ আমি management.call_command সম্মুখের Exec কর্ম করতে সক্ষম হয়নি: ডি: ডি

68

আমি পার্টির জন্য দেরি করেছি তবে আমি আশা করি আমার প্রতিক্রিয়া কারও পক্ষে সহায়তা করবে: আপনি আপনার পাইথন স্ক্রিপ্টে এটি করতে পারেন:

import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings

আপনার বাকি জিনিস এখানে যায় ....


3
এছাড়াও খেয়াল করুন যে আপনি sys.path.appendযতক্ষণ DJANGO_SETTINGS_MODULESঠিক ডান হয়ে যাবেন ততক্ষণ আপনি জিনিসটি ফেলে দিতে পারেন (যেমন আপনার সাইটের মূলের ঠিক উপরে আপনি যদি কোনও স্ক্রিপ্ট বসে থাকেন তবে os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings')।
ম্যাগলগগুলি

আমি কাজটি শেষ করেছি sys.path.append(os.getcwd()), আমি যখন আমার প্রকল্পের ডিরেক্টরিতে থাকি তখন এটি কাজ করে, আমার ডিজেঙ্গো_এসটিটিংসএস_মডুয়েল সঠিক এবং আমি একটি স্ক্রিপ্ট চালানোর চেষ্টা করি যা মডেল, ভিউ, ইত্যাদি আমদানি করে
ড্যানিলো ক্যাবেলো

হ্যাঁ তবে আপনি এটিকে কোথাও থেকে চালাতে পারবেন না!
ই-নুরি

এটি আমার সাথে জাজানো ১.6 নিয়ে কাজ করে না - আমার কাছে একটি অ্যাপ রয়েছে। আমি জ্যাঙ্গো প্রকল্প ডিরেক্টরি অন্তর্ভুক্ত করতে এবং প্রকল্পের সেটিংস সেট আপ করার জন্য আমার পথ সেট করে রেখেছি। তবে যখন আমি "শপিংলিস্ট থেকে মডেলগুলি শপিংলিস্ট আমদানি করে" দিয়ে আমার অ্যাপ্লিকেশনটি আমদানি করি তখন আমাকে একটি ত্রুটি দেওয়া হয় যা এটি মডেলগুলি সন্ধান করতে পারে না। একই ইমপোর্ট লাইনটি ম্যানেজ.পি শেল থেকে কাজ করে। কোন ধারনা?
ফ্র্যাঙ্কস্টার

33

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।


1
আপনি যদি ইতিমধ্যে ব্যবহার করেন django-extensions(তবে আপনার উচিত) তবে এটি সেরা উত্তর । দ্রষ্টব্য: দেখে মনে হচ্ছে runscriptএটি স্ট্যান্ডার্ড জ্যাঙ্গো ব্যবহার করে shell। এটি দুর্দান্ত shell_plus(এক্সটেনশানগুলিতে) ব্যবহার করলে এটি দুর্দান্ত হবে যাতে সাধারণ স্ক্রিপ্টগুলির জন্য আপনাকে সবকিছু আমদানি করতে হবে না।
গ্রুকপট

12

তাহলে 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
smido

8

আপনি DJANGO_SETTINGS_MODULEএনভায়রনমেন্ট ভেরিয়েবল সেট সহ কেবল স্ক্রিপ্টটি চালাতে পারেন । জ্যাঙ্গো-শেল পরিবেশ স্থাপনে এটিই লাগে।

এটি জাঙ্গো> = 1.4 এ কাজ করে


7

অ্যাটুলভারমা অ-কার্যকরী স্বীকৃত উত্তরের অধীনে একটি খুব দরকারী মন্তব্য দিয়েছেন :

echo 'import myscript' | python manage.py shell

দুর্দান্ত উত্তর! আমি মন্তব্যগুলিতে এটি মিস করেছি। এখানে রাখার জন্য ধন্যবাদ
অনুপম


4

যেমন অন্যান্য উত্তরগুলি ইঙ্গিত করে তবে সুস্পষ্টভাবে বর্ণনা করে না, আপনার যা দরকার তা জাজানো শেল থেকে আপনার স্ক্রিপ্টটি সম্পাদন করা নয়, জ্যাঙ্গো শেলটি ব্যবহার না করেই আপনার অ্যাপ্লিকেশনগুলি অ্যাক্সেস করা উচিত ।

এটি জ্যাঙ্গো সংস্করণে অনেকটা জ্যাঙ্গো সংস্করণকে পৃথক করে। আপনি যদি এই থ্রেডটিতে সমাধান না পান তবে এখানে উত্তর দিন - ম্যানেজ.পি শেল ব্যবহার না করে মডেল অবজেক্টগুলিতে অ্যাক্সেস করার জন্য জ্যাঙ্গো স্ক্রিপ্ট - বা অনুরূপ অনুসন্ধানগুলি আপনাকে সহায়তা করতে পারে।

আমার সাথে আমার_কম্যান্ড.পি শুরু করতে হয়েছিল

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

(জাজানো ২.০.২)


এটি এখনও জ্যাঙ্গো 3.0 এর জন্য কাজ করে। আমি এবং `sys.path.append (BASE_DIR) with এর sys.path.append('/path/to/myproject')সাথে প্রতিস্থাপন BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))করেছি` কমান্ডটি কার্যকর করার আগে আপনার ভার্চুয়াল এনভিটি সক্রিয় করতে ভুলবেন না!
মিঃ

3
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())

django.setup()

1
আপনি দয়া করে সম্পাদন করা কেন এই কোডটি অনুরূপ আগের উত্তরের কিছু আলাদা ভাবে প্রশ্নের উত্তর একটি ব্যাখ্যা আছে? কোড-কেবল উত্তরগুলি নিরুৎসাহিত করা হয় , কারণ তারা সমাধানটি শেখায় না।
নাথন টগি

2

দ্রষ্টব্য, এই পদ্ধতিটি জাঙ্গোর আরও সাম্প্রতিক সংস্করণের জন্য অবচিত করা হয়েছে! (> ১.৩)

বিকল্প উত্তর, আপনি এটি শীর্ষে যুক্ত করতে পারেন my_script.py

from django.core.management import setup_environ
import settings
setup_environ(settings)

এবং আপনার my_script.pyযে ডিরেক্টরিতে রয়েছে তেমন পাইথন দিয়ে settings.pyচালিত করুন তবে এটি কিছুটা হ্যাকি।

$ python my_script.py

1

আপনি যদি বিজিতে আরও ভালভাবে চালাতে চান তবে:

nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &

আউটপুট হবে nohup.out


0

আমার কাছে আকর্ষণীয় কিছু খুঁজে পেয়েছিল তা হ'ল জ্যাঙ্গো স্ক্রিপ্টস, যা আপনাকে স্ক্রিপ্টগুলি পাইথন ম্যানেজ.পি রানস্ক্রিপ্ট ফুবার দিয়ে চালানোর অনুমতি দেয়। বাস্তবায়ন এবং কাঠামো সম্পর্কিত আরও বিশদ তথ্য এখানে পাওয়া যাবে, http://django-extensions.readthedocs.org/en/latest/index.html


0

আপনি যদি ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করছেন এটি ব্যবহার করে দেখুন: -

পাইথন ম্যানেজ.পি শেল

এই কমান্ডটি ব্যবহার করার জন্য আপনাকে অবশ্যই ভার্চুয়াল এনভায়ারভেন্টের ভিতরে থাকতে হবে। এই ব্যবহারের জন্য: -

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


0

ওপি হিসাবে একই প্রশ্নটি নিয়ে এখানে এসেছিল এবং আমি আমার প্রিয় উত্তরটি প্রশ্নের মধ্যে থাকা ভুলটিতে অবিকল পেয়েছি, যা পাইথন 3 তেও কাজ করে:

./manage.py shell <<EOF
import my_script
my_script.main()
EOF

0

এটি অন্যভাবে চালিত করে:

echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base

এটি পাইথন 2.7 এবং জ্যাঙ্গো 1.9 এ কাজ করছে


0

আপনি যদি স্টার্টআপ স্ক্রিপ্টটি চালাতে চান (উদাহরণস্বরূপ তাদের সাথে ইন্টারেক্টিভভাবে কাজ করার জন্য কিছু জ্যাঙ্গো মডেল আমদানি করুন) এবং জাঙ্গো শেলের মধ্যে থেকে যান:

PYTHONSTARTUP=my_script.py python manage.py shell

0

জ্যাঙ্গো শেলটি জ্যাঙ্গো পরিবেশের সাথে অজগর মডিউলটি কার্যকর করার ভাল উপায়, তবে মডিউলগুলি আমদানি করা এবং ম্যানুয়ালি বিশেষত স্বয়ংক্রিয়ভাবে সম্পূর্ণ না হয়ে ফাংশন সম্পাদন করা সহজ এবং ক্লান্তিকর নয়। এটি সমাধানের জন্য, আমি একটি ছোট শেল স্ক্রিপ্ট "রানস্ক্রিপ্ট.শ" তৈরি করেছি যা আপনাকে স্বয়ংক্রিয়তা সমাপ্তি এবং লিনাক্স কনসোলের লগ ইতিহাসের পুরো সুবিধা নিতে দেয়।

এনবি: রুট প্রজেক্টে রানস্ক্রিপ্ট.এসপি অনুলিপি করুন এবং সম্পাদনা ডান সেট করুন (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
বরফে nzcr4

ধন্যবাদ ফ্রস্ট- nzcr4। হ্যাঁ, প্রকৃতপক্ষে, এই এক্সটেনশানটি কাজ করে, তবে আমি এটিকে কেবল srcipts ফোল্ডারে এবং কেবল রান () ফাংশনটিতে সীমাবদ্ধ দেখতে পাই। আমার srcipt দিয়ে আপনি যে কোনও ফোল্ডারের যে কোনও জায়গায় ফাংশন সম্পাদন করতে পারেন।
মার্টিন 13

0

পার্টিতে লে। তবে এটি কারও পক্ষে সহায়ক হতে পারে।

আপনার যা দরকার তা হ'ল আপনার স্ক্রিপ্ট এবং django-extensionsইনস্টল করা।

কেবলমাত্র shell_plusউপলভ্য চালান django_extensionsএবং আপনার লিখিত স্ক্রিপ্টটি আমদানি করুন।

যদি আপনার স্ক্রিপ্টটি থাকে scpt.pyএবং এটি কোনও ফোল্ডারের ভিতরে থাকে তবে folআপনি নিম্নলিখিতটি স্ক্রিপ্টটি চালাতে পারেন।

python manage.py shell_plus

এবং কেবল নিজের স্ক্রিপ্টটি শেলের ভিতরেই আমদানি করুন।

>>> from fol import scpt

-1

django.setup () কাজ করছে বলে মনে হচ্ছে না।

প্রয়োজন হয় না বলে মনে হয়।

এই একা কাজ।

import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")

1
django.setup () অবশ্যই জ্যাঙ্গো পরিবেশ বুটস্ট্র্যাপ করার জন্য প্রয়োজন।
colm.anseo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.