web-dev-qa-db-ja.com

DjangoシェルからPythonスクリプトを実行する方法

DjangoシェルからPythonスクリプトを実行する必要があります。私は試した:

./manage.py Shell << my_script.py

しかし、うまくいきませんでした。私が何かを書くのをただ待っていました。

197
user2429940

<<の部分が間違っています。代わりに<を使用してください。

$ ./manage.py Shell < myscript.py

あなたもすることができます:

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

Python3ではあなたが使う必要があるでしょう

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

Shellからそれをすることはお勧めできません - これはDjango環境からランダムなスクリプトを実際に実行するべきではないためです(ただしこれを回避する方法があります)。他の答えを参照してください)。

これが複数回実行されるスクリプトである場合、それを カスタムコマンドとして設定することをお勧めします

 $ ./manage.py my_command

これを行うには、あなたのmanagementcommandsappのサブディレクトリにファイルを作成します。

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
190
danodonovan

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と同じフォルダにあります)。

89
cgons

私はパーティーに遅刻します、しかし私は私の応答が誰かに役立つことを願っています:あなたはあなたのPythonスクリプトでこれをすることができます:

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

あなたのものの残りはここに行きます....

66
e-nouri

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
9
gitaarik

Django_SETTINGS_MODULE環境変数を設定してスクリプトを実行するだけです。 Django-Shell環境の設定に必要な作業はこれだけです。

これはDjangoで動作します> = 1.4

8
ziima

他の答えが示すが明示的に述べていないように、実際に必要なのは、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)

4
Simone
import os, sys, Django
os.environ["Django_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())

Django.setup()
3
user5121699

@AtulVarmaは、うまく動かない 受け入れられた答え の下で非常に役に立つコメントを提供しました。

echo 'import myscript' | python manage.py Shell
3
raratiru

あなたのスクリプトにたくさんのコマンドがないなら、それを使ってください:

manage.py Shell --command="import Django; print(Django.__version__)"

Djangoのドキュメント

3
MrNinjamannn

注意してください、このメソッドは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
2
danodonovan

あなたが仮想環境を使用している場合はこれを試してみてください -

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は私の仮想環境の名前です

1
Rahul Satal

BGを使いこなしたい場合は、

Nohup echo 'exec(open("my_script.py").read())' | python manage.py Shell &

出力はNohup.outになります

1
Kevin He

他の方法でこれを実行します:

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

0
tseboho

oPと同じ質問でここに来ました、そして、私は質問の中の間違いで私の大好きな答えを正確に見つけました、そしてそれはPython 3でも働きます:

./manage.py Shell <<EOF
import my_script
my_script.main()
EOF
0
mariotomo