DjangoシェルからPythonスクリプトを実行する必要があります。私は試した:
./manage.py Shell << my_script.py
しかし、うまくいきませんでした。私が何かを書くのをただ待っていました。
<<
の部分が間違っています。代わりに<
を使用してください。
$ ./manage.py Shell < myscript.py
あなたもすることができます:
$ ./manage.py Shell
...
>>> execfile('myscript.py')
Python3ではあなたが使う必要があるでしょう
>>> exec(open('myscript.py').read())
Shell
からそれをすることはお勧めできません - これはDjango環境からランダムなスクリプトを実際に実行するべきではないためです(ただしこれを回避する方法があります)。他の答えを参照してください)。
これが複数回実行されるスクリプトである場合、それを カスタムコマンドとして設定することをお勧めします
$ ./manage.py my_command
これを行うには、あなたの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
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プロジェクトと同じディレクトリにあります(すなわち、manage.pyと同じフォルダにあります)。
私はパーティーに遅刻します、しかし私は私の応答が誰かに役立つことを願っています:あなたはあなたのPythonスクリプトでこれをすることができます:
import sys, os
sys.path.append('/path/to/your/Django/app')
os.environ['Django_SETTINGS_MODULE'] = 'settings'
from Django.conf import settings
あなたのものの残りはここに行きます....
runscript
from Django-extensions
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 に記載され、次のURLに記載されています。
python manage.py runscript --help
Django 1.9.6、Django-extensions 1.6.7でテスト済み。
IPython が利用可能な場合(pip install ipython
)、./manage.py Shell
は自動的にそのシェルを使用し、その後魔法のコマンド を使用することができます%run
:
%run my_script.py
Django_SETTINGS_MODULE
環境変数を設定してスクリプトを実行するだけです。 Django-Shell環境の設定に必要な作業はこれだけです。
これはDjangoで動作します> = 1.4
他の答えが示すが明示的に述べていないように、実際に必要なのは、Djangoシェルからスクリプトを実行することではなく、使用せずにアプリにアクセスすることです Django Shell。
これは、DjangoバージョンとDjangoバージョンが大きく異なります。このスレッドで解決策が見つからない場合は、ここで答え- manage.py Shellを使用せずにモデルオブジェクトにアクセスする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)
import os, sys, Django
os.environ["Django_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
Django.setup()
@AtulVarmaは、うまく動かない 受け入れられた答え の下で非常に役に立つコメントを提供しました。
echo 'import myscript' | python manage.py Shell
あなたのスクリプトにたくさんのコマンドがないなら、それを使ってください:
manage.py Shell --command="import Django; print(Django.__version__)"
注意してください、このメソッドはDjango!のより最近のバージョンでは推奨されていません!(> 1.3)
別の答えとして、これをmy_script.py
の先頭に追加することができます。
from Django.core.management import setup_environ
import settings
setup_environ(settings)
my_script.py
があるディレクトリでpythonを使用してsettings.py
を実行しますが、これは少し厄介です。
$ python my_script.py
あなたが仮想環境を使用している場合はこれを試してみてください -
python manage.pyシェル
これらのコマンドを使用するためには、仮想環境内にいる必要があります。この用途のために: -
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)
>>>
注: - ここでmysiteは私のウェブサイトの名前で、jangoは私の仮想環境の名前です
BGを使いこなしたい場合は、
Nohup echo 'exec(open("my_script.py").read())' | python manage.py Shell &
出力はNohup.out
になります
他の方法でこれを実行します:
echo 'execfile("/path_to/myscript.py")' | python manage.py Shell --settings=config.base
これはPython2.7とDjango1.9で動作しています
私が興味を持ったのは、Django Scriptsです。これを使えば、python manage.py runscript foobarを使って実行するスクリプトを書くことができます。実装とscructureに関するより詳細な情報はここで見つけることができます、 http://Django-extensions.readthedocs.org/en/latest/index.html
oPと同じ質問でここに来ました、そして、私は質問の中の間違いで私の大好きな答えを正確に見つけました、そしてそれはPython 3でも働きます:
./manage.py Shell <<EOF
import my_script
my_script.main()
EOF